Як я відрізняю файли / папки на машинах за умови, що єдине доступне з'єднання - ssh?
Як я відрізняю файли / папки на машинах за умови, що єдине доступне з'єднання - ssh?
Відповіді:
Ви можете це зробити із заміною процесу Баша :
diff foo <(ssh myServer 'cat foo')
Або якщо обидва знаходяться на віддалених серверах:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
Нарешті я знайшов чудове рішення: vimdiff
vimdiff /path/to/file scp://remotehost//path/to/file
завдяки http://linux.spiney.org/remote_diff_with_vim_and_ssh див. також http://www.vim.org/scripts/script.php?script_id=1075 .
//
після remotehost
важливо. Один косою рисою не вийде
vimdiff /path/to/file scp://username@remotehost//path/to/file
Ось ще один швидкий і брудний рецепт командного рядка. На відміну від обраної відповіді, вона працює всередині файлів:
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
Використовуйте scp, щоб перенести файли на загальну машину і відрізняти їх там?
Або, якщо ви просто хочете знати , якщо файли мають різні чи ні, хеш їх з допомогою md5sum на кожній машині.
Ви також можете розглянути щось на зразок SSHFS , але я не знаю, наскільки добре працює алгоритм на зразок diff.
rsync --dry-run
.
Один із способів, якщо це можливо у вашій системі, - це просто встановити віддалену файлову систему за допомогою sshfs .
Ви можете використовувати rsync
в режимі сухого виконання, як коротко запропоновано в іншій відповіді . У ньому перераховані всі файли, які відрізняються.
Для цього використовуйте rvnc
параметри ( r
= рекурсивний, v
= багатослівний, n
= сухий цикл, c
= контрольна сума). З rsync
режимом "pull" ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), наприклад:
rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .
Пам'ятайте , що це не містить інформації про те, чи локальний або віддалений файл новіший. Просто, якщо вони відрізняються.
на локальній машині зробіть рекурсивну копію каталогу, який ви хочете відрізняти. Наприклад:
cp -R dir replica
використовувати rsync для копіювання віддаленого каталогу через локальну копію:
rsync remote:/path/to/dir replica
використовуйте diff, щоб знайти різницю між локальним каталогом та локальною реплікою віддаленого:
diff dir replica
Ось як я це зробив.
Я використовував SFTP на віддаленому сервері і вводив своє ім'я користувача / pwd при появі запиту. Тоді я використав dir, який був створений у .gvfs dir у моєму домашньому каталозі в команді diff.
diff -r - короткий / домашній / користувач dir / .gvfs / SFTP \ on \ freenas.local / шлях до dir / dir1 / шлях до локального dir / dir2
Це сценарій, за допомогою якого можна відрізняти локальну та віддалену папки.
#!/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/
diff <(/ usr / bin / ssh user1@192.168.122.1 'ls / opt / lib /') <(/ usr / bin / ssh user2@192.168.122.1 'ls / tmp /') | grep -i ">" | sed 's /> // g'
Використовуйте sshfs, встановлений через ssh. Це не буде все так швидко, але ви можете використовувати повний набір інструментів, які очікують, що все буде у локальній файловій системі. Альтернативою є NFS над тунелем, виконаним з "ssh -w" (або іншими комунікаціями, де ssh не є обмеженням).
Ви також можете спробувати узагальнити підхід, створивши функцію bash, можливо, у своєму ~ / .bashrc:
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
потім викликає його конструкцією на зразок:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
Якщо викликати diff з -s, це також повідомить, якщо файли однакові.
Ура! Джим
rsync -ani --delete / root@remotehost:/
але повна відповідь дає більш детальну інформацію.