Как сделать diff по ssh?

Как мне сопоставить файлы /папки на компьютерах, если доступно единственное доступное соединение: ssh?

162 голоса | спросил Alexey Timanovsky 26 PM00000090000002031 2009, 21:17:20

14 ответов


98

Наконец, я нашел отличное решение: 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.

ответил Alexey Timanovsky 15 Maypm10 2010, 12:55:38
136

Вы можете сделать это с помощью замены Bash :

diff foo <(ssh myServer 'cat foo')

Или, если оба находятся на удаленных серверах:

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
ответил Kyle Brandt 26 PM00000090000002531 2009, 21:22:25
58

Если вы просто хотите посмотреть, какие файлы разные, а не разницу между фактическими файлами, вы можете использовать rsync -dry-run

ответил Rory 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 04 Sep 2009 15:14:23 +0400 2009, 15:14:23
15

Вот еще один быстрый и грязный рецепт командной строки. В отличие от выбранного ответа, он работает внутри make-файлов:

ssh [login] @ [host] "cat [remote file]" | diff - "[локальный файл]"
ответил Steve Dickinson 27 MonEurope/Moscow2010-12-27T21:43:28+03:00Europe/Moscow12bEurope/MoscowMon, 27 Dec 2010 21:43:28 +0300 2010, 21:43:28
10

Использовать scp для переноса файлов на общую машину и разграничить их там?

Или, если вы просто хотите узнать, являются ли файлы разными или нет, запишите их с помощью md5sum на каждой машине.

Вы также можете посмотреть что-то вроде SSHFS , но я не знаю, насколько хорошо алгоритм, подобный diff, выполняет над этим.

ответил Ian Clelland 26 PM00000090000004831 2009, 21:19:48
7

Один из способов, если это возможно в вашей системе, - просто подключить удаленную файловую систему с помощью sshfs .

ответил Zoredache 26 PM00000090000005631 2009, 21:19:56
3

Вы можете использовать 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 /.

Помните , это не дает информации о том, является ли локальный или удаленный файл более новым. Просто, если они отличаются.

ответил zzapper 29 PMpTue, 29 Apr 2014 16:21:46 +040021Tuesday 2014, 16:21:46
2
  • на вашем локальном компьютере, сделайте рекурсивную копию каталога, который вы хотите разделить. Например:

    cp -R dir replica
    
  • используйте rsync для репликации удаленного каталога по локальной копии:

    rsync remote: /путь /to /dir replica
    
  • используйте diff, чтобы найти разницу между локальным каталогом и локальной репликой удаленного:

    diff dir replica
    
ответил salva 30 Jpm1000000pmWed, 30 Jan 2013 17:16:19 +040013 2013, 17:16:19
2

Если у вас есть sshfs и вам нужны каталоги diff:

mkdir remote_path
sshfs user @ host: /path /remote_path
diff -r path remote_path
ответил metrix 10 12014vEurope/Moscow11bEurope/MoscowMon, 10 Nov 2014 08:22:40 +0300 2014, 08:22:40
1

Вот как я это сделал.

Я использовал SFTP на удаленном сервере и ввел мое имя пользователя /pwd при появлении запроса. Затем я использовал каталог, созданный в каталоге .gvfs в моем домашнем каталоге в команде diff.

diff -r --brief /home /user dir /.gvfs /SFTP \ on \ freenas.local /путь к dir /dir1 /путь к локальному dir /dir2

ответил Peter 2 Jam1000000amMon, 02 Jan 2012 00:30:57 +040012 2012, 00:30:57
1

Это скрипт, который может помочь локализовать локальную папку и удаленную папку.:

#! /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
ответил stainless 12 Jpm1000000pmThu, 12 Jan 2012 20:41:48 +040012 2012, 20:41:48
1

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 /> //г '

ответил Riaan 9 J0000006Europe/Moscow 2012, 19:04:48
1

Используйте sshfs , смонтированный через ssh. Это будет не так быстро, но вы можете использовать полный набор инструментов, которые ожидают, что все будет в локальной файловой системе. Альтернативой является NFS через туннель, созданный с помощью «ssh -w» (или других сообщений, где ssh не является ограничением).

ответил Skaperen 30 AM00000010000004631 2013, 01:05:46
1

Вы также можете попытаться обобщить подход, создав функцию bash, возможно, в ~ /.bashrc:

myrdiff () {ssh root @ "$ 1" cat "$ 2" | diff -s - "$ 2"; }

, затем вызывая его конструкцией вроде:

myrdiff vm20-x86-64 /etc /gdm /Init /Default

Запустив diff с -s, он также сообщит, идентичны ли файлы.

Ура! Джим

ответил Jim Swain 25 +04002014-10-25T01:51:37+04:00312014bEurope/MoscowSat, 25 Oct 2014 01:51:37 +0400 2014, 01:51:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132