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


Saya mencoba melakukan sesuatu di sepanjang baris:

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


23
2018-01-04 00:21


asal




Jawaban:


Anda sudah dekat. Di bash yang Anda inginkan substitusi proses, bukan substitusi perintah:

diff <(ls -1a ./dir1) <(ls -1a ./dir2)

39
2018-01-04 00:52





diff -rq dir1 dir2

menggunakan opsi -r, jalani seluruh pohon direktori, secara rekursif memeriksa perbedaan antara subdirektori dan file yang terjadi pada titik yang sebanding di setiap pohon. Triknya adalah menggunakan opsi -q untuk menekan perbandingan baris demi baris


5
2018-01-04 01:05



@festo: Anda telah kehilangan poitn pertanyaan ini, saya tidak benar-benar ingin membedakan isi dari file, saya ingin diff output dari ls perintah - bguiz
+1, Sebenarnya, saya mendapat output yang sama dengan satu peringatan, diff-rq melaporkan file yang ditautkan sebagai 'Tidak ada file atau direktori semacam itu'. Jadi, ditambah satu untuk yang benar, dan penggunaan yang lebih sederhana. (bahkan jika jawaban IVA adalah 'kesempatan belajar' yang lebih baik untuk substitusi proses (> _ <) - xtian
Ini adalah banyak lebih lambat dari diffing nama file: keseluruhan setiap file harus dibaca dan dibandingkan. - Zaz
@Josh tentu saja, karena secara rekursif .... - Braiam
@Braiam: Bahkan jika Anda secara rekursif membedakan nama file (menggunakan rsync dengan --dry-run pilihan, misalnya), masih akan jauh lebih cepat daripada diff -r. - Zaz