Temukan file di satu direktori, bukan di direktori lain


12

Apakah ada alat Linux / Unix yang menemukan semua file dalam satu direktori tidak hadir di direktori lain? Pada dasarnya saya mencari diff yang berfungsi pada output ls.

Naskah pendek dan manis juga dihargai.

Jawaban:


20

diff sudah melakukan ini:

diff dir1 dir2

Contoh output:

Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt

5
Ini bagus. Satu keluhan: diff sebenarnya berjalan pada masing-masing file yang ada di keduanya. Apakah ada opsi yang tidak jelas untuk hanya menjalankan terhadap nama file (saya mungkin melewatkannya)? Kalau tidak, saya sarankandiff dir1 dir2 | grep "Only"
Willi Ballenthin

wow ini hanya menyelamatkan saya beberapa menit dari bash scripting terima kasih
user5359531


4

Seperti yang dikatakan orang di sini, Anda dapat menggunakan DIFF dalam berbagai variasi penggunaan. Atau Anda hanya menggunakan dirdiff, yang dimaksudkan untuk apa yang Anda coba! :-)

Tetapi jika Anda ingin menyimpan beberapa direktori dalam sinkronisasi maka Anda benar-benar harus melihatnya rsync.

Salam


3

Jika Anda ingin melakukan ini melalui semua sub direktori juga, cara yang baik untuk melakukannya adalah:

diff --brief -r dir1/ dir2/

Saya lebih suka menggunakan brief, tetapi Anda bisa mengabaikannya jika mau.


1

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


0

Ini bekerja..

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

0

belum dicoba:

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

0

Dennis Williamson punya jawaban yang bagus , tetapi saya perlu melakukan ini secara rekursif. GNU findutils 4.7.0 tidak mengurutkan outputnya, jadi inilah yang saya gunakan

diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)

Untuk melakukan ini hanya satu cara, dan menghasilkan daftar file, saya menggunakan ini:

diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"

Agar ini berfungsi dengan baik, $ dir1 atau $ dir2 tidak boleh menyertakan trailing slash.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.