Bir dizindeki tüm dosyaları başka bir dizinde bulunmayan herhangi bir Linux / Unix aracı var mı? Temelde ben ls çıktı üzerinde çalışan fark arıyorum.
Kısa ve tatlı senaryolar da takdir edilmektedir.
Bir dizindeki tüm dosyaları başka bir dizinde bulunmayan herhangi bir Linux / Unix aracı var mı? Temelde ben ls çıktı üzerinde çalışan fark arıyorum.
Kısa ve tatlı senaryolar da takdir edilmektedir.
Yanıtlar:
diff
bunu zaten yapıyor:
diff dir1 dir2
Örnek çıktı:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
Bash:
diff <(cd dir1; ls) <(cd dir2; ls)
Dosya adlarını değil, yalnızca dosya adlarını karşılaştırın.
ls
, find
bunun yerine kullanın!
Bunu tüm alt dizinler aracılığıyla da yapmak istiyorsanız, bunu yapmanın iyi bir yolu:
diff --brief -r dir1/ dir2/
Kısa kullanmayı tercih ederim, ama isterseniz bunu dışarıda bırakabilirsiniz.
Dennis Williamson'ın iyi bir cevabı vardı , ama bunu tekrar tekrar yapmam gerekiyordu. GNU findutils 4.7.0 çıktılarını sıralamıyor, bu yüzden kullandım
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
Bunu tek bir şekilde yapmak ve bir dosya listesi oluşturmak için bunu kullandım:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
Bunun düzgün çalışması için, ne $ dir1 ne de $ dir2 sondaki eğik çizgiyi içermemelidir.
diff dir1 dir2 | grep "Only"