Bir dizindeki dosyaları başka bir dizinde değil


12

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:


20

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

5
Bu iyi. Bir yakınma: diff aslında her iki dosyada da çalışır. Sadece dosya adlarına karşı çalıştırmak için belirsiz bir seçenek var mı (kaçırmış olabilirim)? Aksi takdirde, öneririmdiff dir1 dir2 | grep "Only"
Willi Ballenthin

vay bu sadece bana birkaç dakika bash komut dosyası teşekkürler kurtarmak
user5359531


4

Burada size söylediğimiz gibi, DIFF'ı çeşitli kullanım çeşitlerinde kullanabilirsiniz. Ya da sadece dirdiffonun yerine kullanıyorsunuz . :-)

Ancak bazı dizinleri senkronize tutmak istiyorsanız, gerçekten bir göz atmalısınız rsync.

Saygılarımızla


3

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.


1

for i in $(ls -1 directory1); do if (test -f directory2/$i) then echo $i; fi; done


0

Bu çalışıyor..

ls -a1 /dir1 | sort > /tmp/1
ls -a1 /dir2 | sort > /tmp/2
diff /tmp/1 /tmp/2

0

denenmemiş:

find /dir/A -printf "%P" | while read f; do
  if [ ! -e "/dir/B/$f" ]; then
    echo $f
  fi
done

0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.