Як порівняти відмінності між каталогами (linux)


24

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

редагувати: Як я також порівнюю віддалений dir з місцевим?

Відповіді:


35

З розрізненої сторінки man:

Якщо і з файлу, і в файл - каталоги, diff порівнює відповідні файли в обох каталогах в алфавітному порядку; це порівняння не є рекурсивним, якщо не вказано параметр -r або --recursive. diff ніколи не порівнює фактичний вміст каталогу, як ніби це файл. Файл, який повністю вказано, може бути не стандартним вводом, оскільки стандартний вхід є безіменним, а поняття "файл з тим самим іменем" "не застосовується.

Отже, для порівняння каталогів: diff --brief -r dir1 dir2

Щоб порівняти файли поруч: diff --side-by-side file1 file2


дуже круто, я спробую
Філ

... мені цікаво, як порівняти віддалений каталог з локальним?
Філ

1
Вам доведеться встановити віддалений каталог на локальну машину. Однак ви можете віддалено порівнювати такі файли, як так: ssh REMOTE_SERVER "cat / path / to / some / file" | diff - сторона-бік / шлях-до-якого-небудь файлу - Ще одне, команда 'sdiff' працює на зразок 'diff - сторона-поруч', якщо ви хочете зберегти друк.
Шон Стейтс

2
Використовуйте NFS для монтажу віддаленого каталогу. На віддаленому сервері (server-b) відредагуйте / etc / export та вкладіть у нього таке: / path / of / directory / to / share server-a.ip.address (ro, no_root_squash) Запустіть NFS на server-b (/etc/init.d/nfs start) Підключіть до локального сервера (server-a), додавши в / etc / fstab: server-b.ip.add: / path / of / directory / to / share / mnt / server-b nfs rsize = 32768, wsize = 32768, rw 0 0 Потім на server-a, mkdir / mnt / server-b; mount / mnt / server-b Дякуємо за результати.
Шон Стейтс

2
Ви можете використовувати sshfsдля створення спеціального тимчасового мережевого каталогу замість NFS.
Dan Andreatta

3

Припустимо:

  • ми на www1, порівнюючи з віддаленимwww2
  • існує аутентифікація відкритого ключа від локального www1до віддаленогоwww2
  • ми порівнюємо як одного і того ж користувача на локальному www1та віддаленомуwww2
find / var / www / html / -name "*" -exec md5sum -b {} \; | grep -v "/ var / www / html / excle_this dir"> local.md5
ssh www2 "find / var / www / html / -name '*' -exec md5sum -b {} \; | grep -v / var / www / html / виключити_це цей реєстр> віддалений.md5"
scp www2: remote.md5.
різний локальний.md5 віддалений.md5 

3

Ви дійсно хочете поєднати потужність, rsyncщоб зменшити споживання пропускної здатності з потужністю, diffщоб надати вам гнучкість, добре розбіжна.

Тож щось подібне:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

Я думаю, ви могли б трохи змінити це, якщо ви робите це часто, rsyncа не cpв першому рядку - очевидно, в останньому рядку ви маєте всю потужність diffвідформатувати його, як вам подобається. Можливо, з y у випадку ОП

Недоліком такого підходу є те, що ви в кінцевому підсумку використовуєте вдвічі більше місцевого простору, але менше ніж $ 1 / концерт, хто турбується?


cp --reflink=auto --sparse=alwaysне використовувати місця для копії залежно від базового FS.
Том Хейл

1

Зробіть diff old_dir new_dir > diff.txtсторонні розбіжності на одному сервері.

Для віддалених файлів:

Наприклад: ABC - це існуючий сервер, а XYZ - ваш віддалений сервер, а ім'я каталогу - 123.

Крок 1: Перейменуйте існуючий каталог 123 на сервері ABC як 123_ABC.

ABC:/Home > mv 123 123_ABC

Крок 2: Створіть новий каталог на сервері ABC:

ABC: > mkdir 123_XYZ

Крок 3: Скопіюйте всі файли з каталогу 123 на сервері XYZ до каталогу 123_XYZ на сервері ABC:

XYZ/123 > scp * userid@ABC: /123_XYZ

Це скопіює всі файли з каталогу на вашому сервері XYZ до каталогу ABC / 123_XYZ.

Крок 4: Зробіть різницю між обома каталогами:

Тепер перейдіть на сервер ABC і виконайте різницю між 123_ABC і 123_XYZ

ABC > diff 123_ABC 123_XYZ > diff.txt

Команда, наведена вище, збереже результати diff у diff.txt тим же шляхом.

Тоді ви можете порівняти відмінності.

Дякую,

Мегул


0

AIDE Advanced Interusion Detection Environment (AIDE) - перевірка цілісності файлів для операційних систем UNIX. Його мета - надання звітності про цілісність даних підтримуваних файлових систем. Запустивши AIDE кілька разів на цільовому хості, ви можете визначити, які файли змінюються. Запустивши AIDE кілька разів на різних хостах, ви можете визначити, чим відрізняються файли та дозволи. Потім використовуйте інструмент gui diff для повідомлених "різних" файлів.

Або використовуйте інструмент gui diff, наприклад meld, guiffy, kdiff3, diff, vimdiff, gvimdiff, Emacs, Kompare, Diffuse, Easydiff, TkDiff або xxdiff. Більшість буде робити те, що каталог відрізняється на додаток до файлів. Вам потрібно буде встановити віддалений диск за допомогою NFS, SMBFS або SSHFS, як згадували інші.


0

Або ви можете використовувати два файли з викладеним списком файлів. А потім порівняйте ці два файли. Наприклад:

/path/to/compare/remote$: ls > remote-files 

/path/to/compare/local$: ls > local-files 

Завантажте один із файлів.

-rw-r - r-- 1 1015 1015 26624 2005-06-14 13:10 FILE.TXT  

до FILE.TXT

Використовуйте diff ( diff -y remote-files local-files > diff-files) для порівняння їх поруч. Відкрийте файли diff та перевірте їх. Кожен рядок з> означає інший файл.

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