Bagaimana cara membedakan nama file dalam dua direktori (tanpa menulis ke file perantara)?


31

Saya mencoba melakukan sesuatu seperti:

diff `ls -1a ./dir1` `ls -1a ./dir2`

Tapi itu tidak berhasil karena alasan yang jelas. Apakah ada cara yang lebih baik untuk mencapai ini (dalam 1 baris), daripada ini?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

Terima kasih

Jawaban:



10
diff -rq dir1 dir2

menggunakan opsi -r, berjalan seluruh pohon direktori, memeriksa perbedaan antara subdirektori dan file yang terjadi pada titik-titik yang sebanding di setiap pohon. Caranya adalah dengan menggunakan opsi -q untuk menekan perbandingan baris per baris


3
@festo: Anda akan kehilangan poitn dari pertanyaan ini, saya tidak benar-benar ingin membedakan isi file, saya ingin mengubah output dari lsperintah
bguiz

+1, Sebenarnya, saya mendapatkan output yang sama dengan satu peringatan, diff -rq melaporkan file yang ditautkan sebagai 'Tidak ada file atau direktori'. Jadi, ditambah satu untuk penggunaan yang benar, dan terus terang lebih sederhana. (bahkan jika jawaban IVA adalah 'kesempatan belajar' yang lebih baik untuk penggantian proses (> _ <)
xtian

1
Ini jauh lebih lambat daripada membedakan nama file: keseluruhan dari setiap file harus dibaca dan dibandingkan.
Zaz

@ Ya tentu saja, karena itu secara rekursif ....
Braiam

1
@Braiam: Sekalipun Anda secara rekursif membedakan nama file (menggunakan rsyncdengan --dry-runopsi, misalnya), itu masih akan jauh lebih cepat daripada diff -r.
Zaz
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.