3.3 veya daha sonraki sürümler için diff
, Pete Harlan'ın cevabında--no-dereference
açıklandığı gibi seçeneği kullanmalısınız .
Ne yazık ki eski sürümleri, diff
sembolik bağlantıları görmezden gelmeyi desteklemiyor :
Bazı dosyalar dizin veya normal dosya değildir: sembolik bağlantılar, özel aygıt dosyaları, adlandırılmış yöneltmeler ve soketler gibi olağandışı dosyalardır. Şu anda diff
normal dosyalar gibi sembolik bağlantıları ele almaktadır; en üst düzeyde belirtilirse normal dosyalar gibi diğer özel dosyaları ele alır, ancak dizinleri karşılaştırırken varlıklarını bildirir. Bu, bu patch
tür dosyalarda yapılan değişiklikleri temsil edemez anlamına gelir . Örneğin, hangi sembolik bağın işaret ettiği dosyayı diff
değiştirirseniz, sembolik bağda değişiklik yapmak yerine iki dosya arasındaki farkı çıkarır.
diff
isteğe bağlı olarak değişiklikleri özel dosyalara özel olarak bildirmeli ve patch
bu uzantıları anlamak için genişletilmelidir.
İstediğiniz tek şey bir rsync'i doğrulamaksa (ve eksik olanı düzeltiyorsa), rsync komutunu ikinci kez çalıştırabilirsiniz. Bunu yapmak istemiyorsanız , dizini kontrol etmek yeterli olabilir.
Bunu gerçekten yapmak istiyorsanız , sembolik bağları atlamak için diff
kullanabilirsiniz find
ve her dosya için diff'i ayrı ayrı çalıştırın. A ve b dizinlerini bağımsız değişken olarak girin:
#!/bin/bash
# Skip files in $1 which are symlinks
for f in `find $1/* ! -type l`
do
# Suppress details of differences
diff -rq $f $2/${f##*/}
done
veya bir astar olarak:
for f in `find a/* ! -type l`;do diff -rq $f b/${f##*/};done
Bu içindedir içerik bakımından farklılık dosyaları veya dosyaları tanımlayacaktır bir değil de b .
Bunu not et:
- Tamamen sembolik zincirleri atladığımızdan, bu, sembolik bağlantı adlarının b . Gerekirse, tüm sembolik bağları tanımlamak için ikinci bir bulma geçişine ihtiyacınız olacak ve ardından b'deki varlıklarını açıkça kontrol etmeniz gerekecektir .
- Listenin a içeriğinden yapıldığı için b içindeki fazladan dosyalar tanımlanmayacaktır . Bu muhtemelen senaryonuz için bir problem değildir .
rsync