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 --delete
eklemeyi hatırlamadan önce yaptım .-n
-i
Bu biraz mantıksız, ama bana katlan. Ana rsync
komut, iki dizini birlikte senkronize etmeniz gereken şeydir. Ancak -n -i
senkronizasyon (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 ls
buna 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 stat
diyor 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
, stat
yerleş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 /a
vs /b
dosya 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 stat
yerine 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