Как вы имеете в виду для каталогов, всегда можно заменить cat на ls
Кайл Брандт
27
Я подозреваю, что «для каталогов» означает проведение рекурсивного сравнения
Ian Clelland
9
Я обнаружил, что эта техника не работает для меня, если мой удаленный хост требует пароль. Запрос пароля, похоже, не работал с перенаправлением и не может быть успешно завершен. Если вы используете ssh-ключи, это не должно быть проблемой.
Адам Франко
2
Это отличное общее решение многих проблем. Вместо 'cat foo' вы можете использовать 'find / foo / bar -type f | во время чтения файла; сделать эхо "**** $ file"; cat "$ file"; готово », и у вас будет список имен файлов и содержимого файлов для сравнения.
Вот пример: vimdiff .bash_profile scp: //vaibhavc@10.217.212.97//home/vaibhavc/.bash_profile
vaichidrewar
4
2 косые черты //после remotehostважно. Одиночная косая черта не сработает
Ли Чи Киам
2
Если у вас есть другое имя пользователя на удаленном хосте, чем у вашего текущего хоста, вы должны использоватьvimdiff /path/to/file scp://username@remotehost//path/to/file
JaredC
Как вы можете сделать это с двумя удаленными хостами с файлами ключей id_rsa @JaredC?
Manatax
61
Если вы просто хотите увидеть, какие файлы отличаются, а не различать фактические файлы, то вы можете использовать rsync --dry-run
Если мое редактирование не проходит: этот метод превосходит выбранный ответ, потому что он работает с make-файлами.
Крис Редфорд
@ Стив Дикинсон - что ты имеешь в виду под словом «это работает внутри make-файлов»?
Мартин Вегтер
1
Это также хорошее решение, если вы страдаете от аллергии на Вим, как и я. :) Я создал скрипт bash, который сравнивает один и тот же файл на двух разных хостах, что полезно при переносе служб между компьютерами и сравнении конфигурационных файлов. См. Gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff
Янек
10
Используйте scp, чтобы перенести файлы на общий компьютер и посмотреть их там?
Или, если вы просто хотите узнать , отличаются ли файлы или нет, хэшируйте их с помощью md5sum на каждой машине.
Вы также можете посмотреть что-то вроде SSHFS , но я не знаю, насколько хорошо алгоритм вроде diff работает над этим.
diff обычно одноразовое действие, например, чтобы проверить разницу в конфигурации. Монтирование файловой системы каждый раз возможно, но не удобно. Я бы лучше смол и SCP.
Алексей Тимановский
3
Вы можете использовать rsyncв режиме пробного запуска, как кратко предложено в другом ответе . В нем перечислены любые файлы, которые отличаются.
Для этого используйте rvncпараметры ( r= рекурсивный, v= подробный, n= пробный прогон, c= контрольная сумма). С rsyncв режиме тяги ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]), пример может служить:
Я использовал SFTP для удаленного сервера и при появлении запроса ввел свое имя пользователя / pwd. Затем я использовал каталог, созданный в каталоге .gvfs в моем домашнем каталоге в команде diff.
diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / путь к dir / dir1 / путь к локальному каталогу / dir2
Используйте sshfs, установленный через ssh. Это будет не так быстро, но вы можете использовать свой полный набор инструментов, которые ожидают, что все будет в локальной файловой системе. Альтернативой является NFS через туннель, созданный с помощью «ssh -w» (или других коммуникаций, где ssh не является ограничением).
rsync -ani --delete / root@remotehost:/
но полный ответ дает более подробную информацию.Ответы:
Вы можете сделать это с помощью подстановки процесса Bash :
Или, если оба находятся на удаленных серверах:
источник
Наконец-то я нашел отличное решение: vimdiff
спасибо 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
Если вы просто хотите увидеть, какие файлы отличаются, а не различать фактические файлы, то вы можете использовать
rsync --dry-run
источник
Вот еще один быстрый и грязный рецепт командной строки. В отличие от выбранного ответа, он работает внутри make-файлов:
источник
Используйте scp, чтобы перенести файлы на общий компьютер и посмотреть их там?
Или, если вы просто хотите узнать , отличаются ли файлы или нет, хэшируйте их с помощью md5sum на каждой машине.
Вы также можете посмотреть что-то вроде SSHFS , но я не знаю, насколько хорошо алгоритм вроде diff работает над этим.
источник
rsync --dry-run
.Одним из способов, если это возможно в вашей системе, было бы просто смонтировать удаленную файловую систему с помощью sshfs .
источник
Вы можете использовать
rsync
в режиме пробного запуска, как кратко предложено в другом ответе . В нем перечислены любые файлы, которые отличаются.Для этого используйте
rvnc
параметры (r
= рекурсивный,v
= подробный,n
= пробный прогон,c
= контрольная сумма). Сrsync
в режиме тяги (rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), пример может служить:Помните , это не дает никакой информации о том, является ли локальный или удаленный файл более новым. Просто если они отличаются.
источник
на локальном компьютере создайте рекурсивную копию каталога, который вы хотите просмотреть. Например:
используйте rsync для репликации удаленного каталога поверх локальной копии:
используйте diff, чтобы найти разницу между локальным каталогом и локальной репликой удаленного:
источник
Если у вас есть sshfs и вам нужно проверить каталоги:
источник
Вот как я это сделал.
Я использовал SFTP для удаленного сервера и при появлении запроса ввел свое имя пользователя / pwd. Затем я использовал каталог, созданный в каталоге .gvfs в моем домашнем каталоге в команде diff.
diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / путь к dir / dir1 / путь к локальному каталогу / dir2
источник
Это скрипт, который может помочь разграничить локальную папку и удаленную папку.
источник
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:
затем вызвать его с помощью конструкции, как:
Вызывая diff с параметром -s, он также сообщит, идентичны ли файлы.
Ура! Джим
источник