Как сделать diff по ssh?
Как мне сопоставить файлы /папки на компьютерах, если доступно единственное доступное соединение: ssh?
14 ответов
Наконец, я нашел отличное решение: vimdiff
vimdiff /path /to /file scp: //remotehost //путь /в /файл
благодаря http://linux.spiney.org/remote_diff_with_vim_and_ssh см. также http://www.vim.org/scripts/script.php?script_id=1075.
Вы можете сделать это с помощью замены Bash :
diff foo <(ssh myServer 'cat foo')
Или, если оба находятся на удаленных серверах:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
Если вы просто хотите посмотреть, какие файлы разные, а не разницу между фактическими файлами, вы можете использовать rsync -dry-run
Вот еще один быстрый и грязный рецепт командной строки. В отличие от выбранного ответа, он работает внутри make-файлов:
ssh [login] @ [host] "cat [remote file]" | diff - "[локальный файл]"
Использовать scp для переноса файлов на общую машину и разграничить их там?
Или, если вы просто хотите узнать, являются ли файлы разными или нет, запишите их с помощью md5sum на каждой машине.
Вы также можете посмотреть что-то вроде SSHFS , но я не знаю, насколько хорошо алгоритм, подобный diff, выполняет над этим.
Вы можете использовать rsync
в режиме сухого режима, как это кратко предлагается в другом ответе . В нем перечислены все файлы, которые отличаются друг от друга.
Для этого используйте параметры rvnc
(r
= recursive, v
= verbose, n
= dry -run, c
= контрольная сумма). С rsync
в режиме pull (rsync [OPTION ...] [USER @] HOST: SRC ... [DEST]
), например:
rsync -rvnc [email protected]: /var /www /html /dev /.
Помните , это не дает информации о том, является ли локальный или удаленный файл более новым. Просто, если они отличаются.
-
на вашем локальном компьютере, сделайте рекурсивную копию каталога, который вы хотите разделить. Например:
cp -R dir replica
-
используйте rsync для репликации удаленного каталога по локальной копии:
rsync remote: /путь /to /dir replica
-
используйте diff, чтобы найти разницу между локальным каталогом и локальной репликой удаленного:
diff dir replica
Если у вас есть sshfs и вам нужны каталоги diff:
mkdir remote_path
sshfs user @ host: /path /remote_path
diff -r path remote_path
Вот как я это сделал.
Я использовал SFTP на удаленном сервере и ввел мое имя пользователя /pwd при появлении запроса. Затем я использовал каталог, созданный в каталоге .gvfs в моем домашнем каталоге в команде diff.
diff -r --brief /home /user dir /.gvfs /SFTP \ on \ freenas.local /путь к dir /dir1 /путь к локальному dir /dir2
Это скрипт, который может помочь локализовать локальную папку и удаленную папку.:
#! /bin /bash
LOCALFOLDER = /вар /WWW /Тройник
REMOTEFOLDER = $ (ssh [email protected] '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
если [$ REM -eq $ LOCAL]
тогда
echo Каталоги одинаковы
еще
echo Каталоги отличаются
фи
#diff localssh.txt remotessh.txt | grep -E '^ total' | cut -d "" -f 2
http://myfedora.co.za/2012/04 /Diff-два-удаленные файловые системы /
diff <(/usr /bin /ssh [email protected] 'ls /opt /lib /') <(/usr /bin /ssh [email protected] 'ls /tmp /') | grep -i ">" | sed 's /> //г '
Используйте 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, он также сообщит, идентичны ли файлы.
Ура! Джим