Bagaimana membandingkan perbedaan antara direktori (linux)


24

Saya memiliki dua direktori - satu dari cadangan sebelumnya dan kedua dari cadangan terbaru. Bagaimana saya membandingkan perubahan apa yang dilakukan pada file dalam direktori dari cadangan terbaru di Linux? Juga bagaimana cara saya menampilkan perubahan pada misalnya teks dan file php - Saya sedang memikirkan sesuatu seperti riwayat revisi di wikipedia di mana Anda melihat versi lama di satu sisi layar dan versi terbaru di sisi lain dan perubahan disorot. Bagaimana saya mencapai sesuatu seperti itu?

sunting: Bagaimana saya juga membandingkan remote dir dengan local?

Jawaban:


35

Dari halaman manual diff:

Jika baik dari-file dan ke-file adalah direktori, diff membandingkan file yang sesuai di kedua direktori, dalam urutan abjad; perbandingan ini tidak rekursif kecuali opsi -r atau --recursive diberikan. diff tidak pernah membandingkan isi aktual suatu direktori seolah-olah itu adalah file. File yang ditentukan sepenuhnya mungkin bukan input standar, karena input standar tidak bernama dan gagasan '' file dengan nama yang sama '' tidak berlaku.

Jadi untuk membandingkan direktori: diff --brief -r dir1 dir2

Untuk membandingkan file berdampingan: diff --side-by-side file1 file2


sangat keren, saya akan mencobanya
Phil

... saya ingin tahu bagaimana cara membandingkan direktori jarak jauh dengan yang lokal?
Phil

1
Anda harus memasang direktori jarak jauh ke mesin lokal. Namun, Anda dapat membandingkan file seperti: ssh REMOTE_SERVER dari jarak jauh "cat / path / ke / some / file" | diff --side-by-side / path-to-some-file - Satu hal lagi, perintah 'sdiff' bekerja seperti 'diff --side-by-side' jika Anda ingin menyimpan beberapa pengetikan.
Sean Staats

2
Gunakan NFS untuk memasang direktori jarak jauh. Pada server jarak jauh (server-b), edit / etc / ekspor dan letakkan yang berikut di dalamnya: / path / of / direktori / to / share server-a.ip.address (ro, no_root_squash) Mulai NFS di server-b (/etc/init.d/nfs start) Mount ke server lokal Anda (server-a) dengan menambahkan yang berikut ke / etc / fstab: server-b.ip.add: / path / dari / direktori / ke / share / mnt / server-b nfs rsize = 32768, wsize = 32768, rw 0 0 Kemudian pada server-a, mkdir / mnt / server-b; mount / mnt / server-b Terima kasih atas upvotes.
Sean Staats

2
Anda dapat menggunakan sshfsuntuk membuat direktori jaringan sementara sementara, alih-alih menggunakan NFS.
Dan Andreatta

3

Asumsi:

  • kita aktif www1, membandingkan dengan remotewww2
  • ada otentikasi kunci publik dari lokal www1ke jarak jauhwww2
  • kami membandingkan sebagai pengguna yang sama di lokal www1dan jarak jauhwww2
temukan / var / www / html / -name "*" -exec md5sum -b {} \; | grep -v "/ var / www / html / exclude_ dir ini"> local.md5
ssh www2 "temukan / var / www / html / -nama '*' -exec md5sum -b {} \; | grep -v / var / www / html / exclude_ dir ini> remote.md5"
scp www2: remote.md5.
diff local.md5 remote.md5 

3

Anda benar-benar ingin menggabungkan kekuatan rsyncuntuk mengurangi konsumsi bandwidth dengan kekuatan diffuntuk memberi Anda fleksibel, juga berbeda.

Jadi sesuatu seperti ini:

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

Saya kira Anda bisa mengubah ini sedikit jika Anda sering menggunakannya rsyncdaripada cpdi baris pertama - jelas di baris terakhir Anda memiliki kekuatan penuh diffuntuk memformatnya sesuka Anda. Mungkin dengan y dalam kasus OPs

Kelemahan dari pendekatan ini adalah Anda akhirnya menggunakan ruang lokal dua kali lebih banyak, tetapi kurang dari $ 1 / pertunjukan siapa yang peduli?


cp --reflink=auto --sparse=alwaysuntuk tidak menggunakan ruang untuk salinan tergantung pada FS yang mendasarinya.
Tom Hale

1

Lakukan diff old_dir new_dir > diff.txtuntuk perbedaan berdampingan di server yang sama.

Untuk file jarak jauh:

Sebagai contoh: ABC adalah server yang ada dan XYZ adalah server jarak jauh Anda dan nama direktori adalah 123.

Langkah 1: Ganti nama direktori yang ada 123 di Server ABC sebagai 123_ABC.

ABC:/Home > mv 123 123_ABC

Langkah 2: Buat direktori baru di server ABC:

ABC: > mkdir 123_XYZ

Langkah 3: Salin semua file dari direktori 123 di server XYZ ke direktori 123_XYZ di server ABC:

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

Ini akan menyalin semua file dari direktori pada server XYZ Anda ke direktori server ABC / 123_XYZ Anda.

Langkah: 4: Lakukan perbedaan antara kedua direktori:

Sekarang buka server ABC dan lakukan perbedaan antara 123_ABC dan 123_XYZ

ABC > diff 123_ABC 123_XYZ > diff.txt

Perintah di atas akan menyimpan hasil diff ke diff.txt di jalur yang sama.

Anda dapat membandingkan perbedaan itu.

Terima kasih,

Mehul


0

AIDE Advanced Intrusion Detection Environment (AIDE) adalah pemeriksa integritas file untuk sistem operasi UNIX. Tujuannya untuk menyediakan pelaporan integritas data pada sistem file yang didukung. Dengan menjalankan AIDE beberapa kali pada host target Anda dapat menentukan file apa yang berubah. Dengan menjalankan AIDE beberapa kali pada host yang berbeda, Anda dapat menentukan file dan izin apa yang berbeda. Kemudian gunakan alat bantu pada file "berbeda" yang dilaporkan.

Atau gunakan alat diff gui seperti meld, guiffy, kdiff3, diff, vimdiff, gvimdiff, Emacs, Kompare, Diffuse, Easydiff, TkDiff atau xxdiff. Sebagian besar akan melakukan direktori diff di samping file diffs. Anda harus memasang drive jarak jauh menggunakan NFS, SMBFS atau SSHFS seperti yang telah disebutkan orang lain.


0

Atau Anda dapat menggunakan dua file dengan daftar file keluar. Dan kemudian membandingkan kedua file itu. Sebagai contoh:

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

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

Unduh salah satu file.

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

ke FILE.TXT

Gunakan diff ( diff -y remote-files local-files > diff-files) untuk membandingkannya berdampingan. Buka file-diff dan periksa. Setiap baris dengan> berarti file yang berbeda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.