düzeltme ve seçenek netliği için düzenle - '--brief' i unuttum
diff -rs --brief "$dir1" "$dir2"
-r, --recursive recursively compare any subdirectories found
-s, --report-identical-files report when two files are the same
-q, --brief report only when files differ
--speed-large-files assume large files and many scattered small changes
ve karşılaştırdıklarınıza bağlı olarak tadına bakmak için başka seçenekler ekleyin:
-i, --ignore-case ignore case differences in file contents
-b, --ignore-space-change ignore changes in the amount of white space
-B, --ignore-blank-lines ignore changes whose lines are all blank
--strip-trailing-cr strip trailing carriage return on input
--ignore-file-name-case ignore case when comparing file names
diff -rs, orijinal ve kopyadaki her baytı okur ve aynı olan dosyaları bildirir.
Diff çıkış formatı POSIX tarafından tanımlanır, bu nedenle oldukça taşınabilirdir. Şuna benzer bir şey eklemek isteyebilirsiniz:
| tee fark-1 | grep -v -Ee 'Dosyalar. * ve. * aynı'
Chksums veya karma kullanabilirsiniz, ancak daha sonra onları dosya ağaçları ile senkronize tutmak zorunda, bu yüzden her dosyanın her baytını okumaya geri dönecek.
DÜZENLEME - yorum yapmak için çok uzun, yanıt olarak:
10 GB üzerindeki dosyalar doğrulanmıyor
Bu fark seçeneğini denemek isteyebilirsiniz: --speed-large-files
Kullandığınız fark çok büyük dosyalarla (örneğin sistem belleğinden daha büyük) iyi başa çıkmıyor olabilir ve bu nedenle aslında aynı olan dosyalar arasındaki farkları bildiriyor olabilir.
Büyük dosyalarda daha iyi olan bir -h seçeneği veya bir 'bdiff' olduğunu düşünmüştüm, ancak Fedora'da bir tane bulamıyorum. --Speed-large-files seçeneklerinin '-h' "yarım yürekli karşılaştırma" seçeneğinin ardılı olduğuna inanıyorum.
Farklı bir yaklaşım, kullandığınız rsync komutunu '-vin' (ayrıntılı, itemize, no_run) ile tekrarlamak olacaktır. Bu, rsync'in bulduğu farklılıkları bildirir - ve olmamalıdır.
Bazı dosyaları taşımak için bir komut dosyasına şöyle bakıyorsunuz:
if [ cmp -s "$dir1/$path" "$dir2/$path" ] ; then
target="$dir2/verified/$path"
mkdir -p $(basename "$target")
mv "$dir2/$path" "$target"
fi
ama bunu tavsiye etmiyorum. Temel soru, "rsync'in bir dosya hiyerarşisini doğru bir şekilde kopyaladığından nasıl emin olabilirim?" ve rsync'in diff veya başka bir araçla iyi çalıştığını kendinize gösterebiliyorsanız, o zaman onun etrafında çalışmak yerine rsync'e güvenebilirsiniz.
rsync -vin, verdiğiniz diğer seçeneklere göre karşılaştırır. Ben varsayılan olarak sağlama toplamı olduğunu düşündüm, ama haklısın, bunun için -c veya --checksum gereklidir.
Diff yardımcı programı gerçekten metin satırlarının dosyaları için tasarlanmıştır, ancak ikili dosyalar için 'özdeş' altında -s bildirmelidir.
--Brief herhangi bir dosya içeriği çıktısını bastırmalıdır - daha önce göz ardı ettiğim için özür dilerim - çirkin bir senaryoda yarı gömüldü.