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 diffnormal 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 patchtür dosyalarda yapılan değişiklikleri temsil edemez anlamına gelir . Örneğin, hangi sembolik bağın işaret ettiği dosyayı diffdeğiştirirseniz, sembolik bağda değişiklik yapmak yerine iki dosya arasındaki farkı çıkarır.
diffisteğe bağlı olarak değişiklikleri özel dosyalara özel olarak bildirmeli ve patchbu 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 diffkullanabilirsiniz findve 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