Dosya özniteliklerini de karşılaştıran bir Linux derin fark aracı var mı?


17

Diff gibi dosyaları ve dizinleri özyineli olarak karşılaştıracak bir Linux aracı var mı, ama aynı zamanda karşılaştırma ekleyerek: genişletilmiş öznitelikler, acl's, se bağlamları?


1
Verilen cevaplar arada bir karşılaştırma yapmak için çalışır. Ancak, yazılımı test ederken bu tür karşılaştırmaları saatte birçok kez yapmak için yeterli değildir. Bu karşılaştırmaları içerecek şekilde diff kaynak kodunu değiştirmeye meyilli olabilirim.
Michael Gantz

Yanıtlar:


7

Bunu ve işaretlerini rsync -aHAX --deleteeklemeyi hatırlamadan önce yaptım .-n-i

Bu biraz mantıksız, ama bana katlan. Ana rsynckomut, iki dizini birlikte senkronize etmeniz gereken şeydir. Ancak -n -isenkronizasyon (yani kuru bir çalışma yapmama) ve sadece ne yapacağını ve nedenini yazdırmamaya neden olur. Ayrıştırmak fantastik değil, ancak dosya adını kolayca dışarı çıkarabilir ve lsbuna benzer bir şey ekleyebilirsiniz .

Bu, mtimes, tarihler vb. Dahil her şeye bakacak ve cihaz düğümlerini, soketleri, adlandırılmış borular vb. Seçenekleri değiştirerek rsync, cihazla tek bir cihazla sınırlandırarak -x, yumuşak ve sabit bağlantı davranışını değiştirerek vb. Bakarak baktığınız şeyi ayarlayabilirsiniz .


2

janos zaten ne yapacağını söyledi:

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

Ve man 1 statdiyor ki:

%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

Kullanabileceğiniz dosya içeriğini karşılaştırmak için:

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

Bu çözüm uygulanabilir bir çözüm sağlamaz. Görüntülenen fark bağlamdan bağımsızdır ve okunması çok zordur. Bana bir dosya adı ve farklı olanı gösterebilecek bir şey arıyorum. Tamamen farklı bir canavar olan iki buluntudan farklı değil.
Michael Gantz

1
GNU find, statyerleşik GNU özelliklerine sahiptir (ve onlarca yıl önce GNU statüsünden önce gelir). Ayrılmadan önce çıktıyı sıralamak istersiniz. Ve ihtiyacınız (cd /a && find . ...)aksi takdirde tüm hatları nedeniyle farklı olacaktır /avs /bdosya yolunda.
Stéphane Chazelas

0

İşte genişletilmiş özellikleri karşılaştırmak için yazdığım hızlı bir bash betiği. Her dosya adını ve sonra özniteliklerdeki farklılıkları yazdırır:

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

Başka bir cevap Borçlanma, biz kullanmak için bu değiştirebilirsiniz statyerine 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.