Apakah ada alat Linux deep diff yang juga membandingkan atribut file?
17
Apakah ada alat Linux seperti diff yang secara rekursif akan membandingkan file dan direktori, tetapi dengan tambahan juga membandingkan: atribut diperluas, acl, konteks se?
Jawaban yang diberikan berfungsi untuk melakukan perbandingan sesekali. Tetapi, mereka tidak memadai untuk melakukan perbandingan jenis ini beberapa kali dalam satu jam saat menguji perangkat lunak. Saya mungkin cenderung memodifikasi kode sumber diff untuk memasukkan perbandingan ini.
Michael Gantz
Jawaban:
7
Saya sudah melakukan ini sebelum menggunakan rsync -aHAX --deletemengingat untuk menambahkan -ndan -ibendera.
Ini sedikit berlawanan dengan intuisi, tetapi bersabarlah. rsyncPerintah utama adalah apa yang Anda perlukan untuk menyinkronkan dua direktori bersamaan. Tetapi -n -imenyebabkan TIDAK untuk menyinkronkan (yaitu melakukan lari kering) dan hanya mencetak apa yang akan dilakukan dan mengapa. Ini tidak fantastis untuk diurai, tetapi Anda bisa mendapatkan nama file dengan mudah dan pipa lsatau sejenisnya.
Ini akan melihat segala sesuatu termasuk mtimes, tanggal dll., Serta tidak menindaklanjuti node perangkat, soket, pipa bernama dll. Baris perintah di atas melihat ACL dan atribut diperluas juga. Anda dapat menyesuaikan apa yang Anda lihat dengan mengubah opsi rsync, membatasinya pada satu perangkat dengan -x, mengubah perilaku tautan lunak & keras, dll. Dll.
find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a
find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b
diff -u a b
Dan man 1 statmengatakan:
%A access rights in human readable form
%C SELinux security context string
%F file type
%g group ID of owner
%u user ID of owner
%s total size, in bytes
%Y time of last modification, seconds since Epoch
%n file name
Untuk membandingkan konten file yang dapat Anda gunakan:
find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-
as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash
Solusi ini tidak memberikan solusi yang bisa diterapkan. Perbedaan yang ditampilkan bebas konteks dan terlalu sulit untuk dibaca. Saya mencari sesuatu yang dapat menunjukkan kepada saya nama file dan apa yang berbeda tentangnya. Bukan perbedaan pada dua penemuan yang merupakan binatang yang sama sekali berbeda.
Michael Gantz
1
GNU findmemiliki fitur-fitur GNU statbawaan (dan mendahului status GNU selama beberapa dekade). Anda juga ingin mengurutkan output sebelum melakukan diffing. Dan Anda perlu (cd /a && find . ...)sebaliknya semua baris akan berbeda karena /avs /bdi jalur file.
Stéphane Chazelas
0
Berikut ini skrip bash cepat yang saya tulis untuk membandingkan atribut yang diperluas. Itu mencetak setiap nama file, dan kemudian perbedaan atribut:
cd a
export relpath=[path/to/b/from/a]
for filename in $(find .);
do
echo $filename;
diff <(xattr -l $filename) <(xattr -l $relpath/$filename);
done
Meminjam dari jawaban lain, kita dapat memodifikasi ini untuk digunakan statalih-alih xattr:
for filename in $(find .);
do
echo $filename;
diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename);
done
Jawaban:
Saya sudah melakukan ini sebelum menggunakan
rsync -aHAX --delete
mengingat untuk menambahkan-n
dan-i
bendera.Ini sedikit berlawanan dengan intuisi, tetapi bersabarlah.
rsync
Perintah utama adalah apa yang Anda perlukan untuk menyinkronkan dua direktori bersamaan. Tetapi-n -i
menyebabkan TIDAK untuk menyinkronkan (yaitu melakukan lari kering) dan hanya mencetak apa yang akan dilakukan dan mengapa. Ini tidak fantastis untuk diurai, tetapi Anda bisa mendapatkan nama file dengan mudah dan pipals
atau sejenisnya.Ini akan melihat segala sesuatu termasuk mtimes, tanggal dll., Serta tidak menindaklanjuti node perangkat, soket, pipa bernama dll. Baris perintah di atas melihat ACL dan atribut diperluas juga. Anda dapat menyesuaikan apa yang Anda lihat dengan mengubah opsi
rsync
, membatasinya pada satu perangkat dengan-x
, mengubah perilaku tautan lunak & keras, dll. Dll.sumber
janos sudah mengatakan apa yang harus dilakukan:
Dan
man 1 stat
mengatakan:Untuk membandingkan konten file yang dapat Anda gunakan:
sumber
find
memiliki fitur-fitur GNUstat
bawaan (dan mendahului status GNU selama beberapa dekade). Anda juga ingin mengurutkan output sebelum melakukan diffing. Dan Anda perlu(cd /a && find . ...)
sebaliknya semua baris akan berbeda karena/a
vs/b
di jalur file.Berikut ini skrip bash cepat yang saya tulis untuk membandingkan atribut yang diperluas. Itu mencetak setiap nama file, dan kemudian perbedaan atribut:
Meminjam dari jawaban lain, kita dapat memodifikasi ini untuk digunakan
stat
alih-alihxattr
:sumber