Berikut ini (jika Anda mengganti direktori pertama dengan direktori1 dan direktori kedua dengan direktori2) akan melakukan apa yang Anda cari dan dengan cepat:
find directory1 -type d -printf "%P\n" | sort > file1
find directory2 -type d -printf "%P\n" | sort | diff - file1
Prinsip dasarnya adalah mencetak semua direktori termasuk jalur subdirektori relatif terhadap direktori dasar direktoriN.
Ini bisa gagal (menghasilkan keluaran yang aneh) jika Anda memiliki carriage return di beberapa nama direktori tetapi tidak di yang lain.
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
akan memberi Anda tampilan berdampingan yang bagus dari dua hierarki direktori dengan setiap bagian umum yang dilipat.
Saya biasanya menggunakan rsync
untuk tugas ini:
rsync -nav --delete DIR1/ DIR2
Hati-hati untuk selalu menggunakan -n
, alias --dry-run
, opsi, atau akan menyinkronkan (mengubah konten) direktori.
Ini akan membandingkan file berdasarkan waktu dan ukuran modifikasi file... Saya berpikir itulah yang benar-benar Anda inginkan, atau setidaknya Anda tidak keberatan jika itu terjadi? Saya merasa Anda hanya ingin hal itu terjadi lebih cepat , bukan berarti Anda membutuhkannya untuk mengabaikan perbedaan antara konten file. Jika Anda ingin tidak mencantumkan file yang berbeda dengan nama yang identik, saya pikir penambahan --ignore-existing
opsi akan melakukan itu.
Perlu diketahui juga bahwa tidak meletakkan /
di akhir DIR1
akan membuatnya membandingkan direktori DIR1
dengan konten dari DIR2
.
Outputnya akhirnya menjadi sedikit bertele-tele, tetapi ini akan menunjukkan kepada Anda file/direktori mana yang berbeda. File/direktori ada di DIR2
dan bukan di DIR1
akan diawali dengan kata deleting
.
Untuk beberapa situasi, jawaban @slartibartfast mungkin lebih tepat, meskipun Anda harus menghapus -type d
opsi untuk mengaktifkan daftar file non-direktori. rsync
akan lebih cepat jika Anda memiliki banyak file/direktori untuk dibandingkan.