Запустіть відмінності між локальними та віддаленими файлами


39

Я з'єднаний на хості через, sshі я хотів би порівняти (скажімо, з diff) певний конфігураційний файл з його аналогом на іншому хості, також доступному через ssh, без необхідності спочатку завантажувати віддалений файл перед запуском diff.


Ви можете змонтувати віддалений каталог за допомогою SSHFS, а потім отримати доступ до нього так, ніби він локальний.
Бармар

Відповіді:


57
ssh user@remote_host "cat remote_file.txt" | diff - local_file.txt

Джерело


1
Чи не завантажуватимуться лише результати cat, які насправді є лише оригінальним файлом?
Штійн де Вітт

1
труба підштовхне результат віддаленої sshкоманди до тієї, diffяка чекає порівняння stdinз локальним файлом.
fduff

1
Можливо, я неправильно трактую вимогу "без завантаження віддаленого файлу". Я думаю, що OP означає «без завантаження віддаленого файлу вручну». :) EDIT: Ах, ти ОП. :)
Штійн де Вітт

@StijndeWitt, так, я хотів уникнути необхідності спочатку сканувати віддалений файл, а потім зробити
різний

18

Спробуйте:

diff local_file <(ssh user@server 'cat remote_file')

або використовуючи vimdiff:

vimdiff local_file scp://server//path/to/remote_file

Чи diff local_file <(ssh user@server 'cat remote_file')працює тільки для безпарового SSH? Я, здається, не зміг отримати з ним підказку пароля ...
sdbbs

1
@sdbbs: Заміна процесу виконується у фоновому режимі, а стандартний висновок записується на названу трубу (або анонімну назву), тому ви не отримаєте запит на отримання пароля. Спробуйте cat <(ssh user@server 'cat remote_file')і cat < <(ssh user@server 'cat remote_file')побачити відмінності.
cuonglm

9

Можливо, це не корисно у вашому точному випадку, але я часто просто користуюся

sum -r

на кожній машині та вручну порівнюйте контрольні суми. Це дозволяє порівнювати файли, навіть коли вони недоступні через ssh-з'єднання. Звичайно, все, на що вона відповідає, "чи вони однакові", але часто цього достатньо для моїх потреб. Це також дозволяє легко перевірити, що один файл однаковий на 3 або 4 або більше машинах.


2
Я можу уявити, що для великих файлів або повільних з'єднань це може бути дуже корисним. Це економить завантаження всього файлу, коли файли насправді різні. Кращий сценарій Bash, ніж я, можливо, може поєднати цю відповідь з вищезазначеними відповідями, що включають пульт дистанційного керування, catщоб виконати catкоманду лише тоді, коли було встановлено, що файли відрізняються.
Штійн де Вітт

1
Командування info coreutils 'sum invocation'говорить, між іншим: "" сумі "передбачено для сумісності; програма" cksum "(див. Наступний розділ) є кращою у нових програмах."
Teemu Leisti

1

Якщо ви хочете більш візуальний підхід у вашому термінальному сеансі. Командир опівночі має опцію віддаленої файлової системи (опція SFTP-посилання ... у меню) та параметр візуального порівняння файлів. Він не встановлений за замовчуванням у більшості систем Linux, але доступний у більшості базових сховищ. Кроки:

  1. Запустіть опівночі командир (команда:) mcу папці, що містить файл для порівняння
  2. З іншого боку (наприклад, меню Право ) створіть sftp-посилання на інший сервер у тій же папці ( sftp://<user>@<servername>/<path>).
  3. За допомогою insклавіші виберіть / виділіть файли для порівняння. ( tabзміни між лівою та правою панеллю).
  4. У меню Команда виберіть Порівняти файли

Примітка. До меню опівночі командира зазвичай можна отримати доступ за допомогою миші в термінальному сеансі. Те, що не працює, F9потрапляє і в меню.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.