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ı?
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ı?
Yanıtlar:
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 .
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
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.
İş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