Làm cách nào để tôi tìm các tệp / thư mục khác nhau trên các máy với điều kiện là kết nối duy nhất có sẵn là ssh?
Làm cách nào để tôi tìm các tệp / thư mục khác nhau trên các máy với điều kiện là kết nối duy nhất có sẵn là ssh?
Câu trả lời:
Bạn có thể làm điều đó với quá trình thay thế của Bash :
diff foo <(ssh myServer 'cat foo')
Hoặc, nếu cả hai đều trên máy chủ từ xa:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
Cuối cùng tôi đã tìm thấy giải pháp tuyệt vời: vimdiff
vimdiff /path/to/file scp://remotehost//path/to/file
cảm ơn http://linux.spiney.org/remote_diff_with_vim_and_ssh xem thêm http://www.vim.org/scripts/script.php?script_id=1075 .
//
sau remotehost
là quan trọng. Độc dấu gạch chéo sẽ không làm việc
vimdiff /path/to/file scp://username@remotehost//path/to/file
Đây là một công thức dòng lệnh nhanh và bẩn. Không giống như câu trả lời được chọn, nó hoạt động bên trong makefiles:
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
Sử dụng scp để đưa các tập tin vào một máy chung và khác chúng ở đó?
Hoặc, nếu bạn chỉ muốn biết liệu các tệp có khác nhau hay không, hãy băm chúng với md5sum trên mỗi máy.
Bạn cũng có thể xem xét một cái gì đó như SSHFS , nhưng tôi không biết thuật toán như diff thực hiện tốt như thế nào.
rsync --dry-run
.
Một cách, nếu có thể trên hệ thống của bạn sẽ chỉ đơn giản là gắn hệ thống tập tin từ xa với sshfs .
Bạn có thể sử dụng rsync
trong chế độ chạy khô, như được đề xuất ngắn gọn trong một câu trả lời khác . Nó liệt kê bất kỳ tập tin nào khác nhau.
Đối với điều đó, sử dụng các rvnc
tùy chọn ( r
= đệ quy, v
= verbose, n
= khô-run, c
= checksum). Với rsync
chế độ kéo ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), một ví dụ là:
rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .
Hãy nhớ rằng , điều này không cung cấp thông tin về việc tệp cục bộ hay tệp từ xa mới hơn. Chỉ cần họ khác nhau.
trên máy cục bộ của bạn, tạo một bản sao đệ quy của thư mục bạn muốn tìm khác biệt. Ví dụ:
cp -R dir replica
sử dụng rsync để sao chép thư mục từ xa qua bản sao cục bộ:
rsync remote:/path/to/dir replica
sử dụng diff để tìm sự khác biệt giữa thư mục cục bộ và bản sao cục bộ của từ xa:
diff dir replica
Đây là cách tôi đã làm nó.
Tôi đã sử dụng SFTP đến máy chủ từ xa và nhập tên người dùng / pwd của mình khi được nhắc. Sau đó, tôi đã sử dụng thư mục được tạo trong thư mục .gvfs trong thư mục chính của tôi trong lệnh diff.
diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / đường dẫn đến dir / dir1 / đường dẫn đến dir / dir2 cục bộ
Đây là một tập lệnh có thể giúp khác biệt thư mục cục bộ và thư mục từ xa.:
#!/bin/bash
LOCALFOLDER=/var/www/tee
REMOTEFOLDER=$(ssh root@111.111.111.1 'ls -lA /hfs/tee'| grep -E '^total' | cut -d " " -f 2 > remotessh.txt)
COMMAND=$(ls -lA $LOCALFOLDER | grep -E '^total' | cut -d " " -f 2 > localssh.txt)
REM=$(cat remotessh.txt)
LOCAL=$(cat localssh.txt)
echo $LOCAL
echo $REM
if [ $REM -eq $LOCAL ]
then
echo Directories are the same
else
echo Directories are differnt
fi
#diff localssh.txt remotessh.txt | grep -E '^total' | cut -d " " -f 2
http://myfedora.co.za/2012/04/diff-two-remote-file-systems/
tìm khác biệt <(/ usr / bin / ssh grep -i ">" | sed 's /> // g'
Sử dụng sshfs gắn trên ssh. Sẽ không nhanh như vậy, nhưng bạn có thể sử dụng bộ công cụ đầy đủ của mình, hy vọng mọi thứ sẽ nằm trên một hệ thống tệp cục bộ. Một cách khác là NFS trên một đường hầm được tạo bằng "ssh -w" (hoặc các thông tin liên lạc khác trong đó ssh không phải là giới hạn).
Bạn cũng có thể thử khái quát hóa cách tiếp cận bằng cách tạo một hàm bash, có thể trong ~ / .bashrc:
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
sau đó gọi nó với một cấu trúc như:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
Bằng cách gọi diff với -s, điều này cũng sẽ báo cáo nếu các tệp giống hệt nhau.
Chúc mừng! Jim
rsync -ani --delete / root@remotehost:/
nhưng câu trả lời đầy đủ cung cấp chi tiết hơn.