Saya memiliki dua direktori dengan daftar file yang sama. Saya perlu membandingkan semua file yang ada di kedua direktori menggunakan diff
perintah. Apakah ada opsi baris perintah sederhana untuk melakukannya, atau apakah saya harus menulis skrip shell untuk mendapatkan daftar file dan kemudian beralih melalui mereka?
303
diff
perintah dengan mengunduh utilitas GNU untuk Win32 .-b
abaikan perubahan spasi putih dan-u
berikan 3 baris buffer.diff -rub folder1/ folder2/
-bur
akan mudah diingat jika Anda hidup di iklim yang dingin.Jika Anda hanya tertarik untuk melihat file yang berbeda, Anda dapat menggunakan:
Opsi "q" hanya akan menampilkan file yang berbeda tetapi tidak konten yang berbeda, dan "mengurutkan" akan mengatur output berdasarkan abjad.
sumber
diff
pada setiap pasangan yang berbeda file. Pendekatan seseorang akan sangat berbeda jika hanya satu atau dua file berbeda dibandingkan jika puluhan file berbeda. Saya bisa tersesat dalam output daridiff
lusinan file sekaligus!-x PATTERN
dalam perintah untuk mengecualikan subdirektori tertentu. Sebagai contoh,diff -qr repo1 repo2 -x ".git"
akan membandingkan dua direktori (repo1 dan repo2) tetapi akan mengecualikan file dalam folder .git dari masing-masing direktori.Diff memiliki opsi
-r
yang dimaksudkan untuk melakukan hal itu.diff -r dir1 dir2
sumber
diff
tidak hanya dapat membandingkan dua file, ia dapat, dengan menggunakan-r
opsi, berjalan di seluruh pohon direktori, secara rekursif memeriksa perbedaan antara subdirektori dan file yang terjadi pada titik yang sebanding di setiap pohon.sumber
Jika itu GNU diff maka Anda hanya bisa mengarahkannya ke dua direktori dan menggunakan opsi -r.
Kalau tidak, coba gunakan
NB Seperti yang ditunjukkan oleh Dennis di bagian komentar, Anda sebenarnya tidak perlu melakukan substitusi perintah pada ls. Saya sudah melakukan ini begitu lama sehingga saya cukup banyak melakukan ini dengan autopilot dan mengganti perintah yang saya butuhkan untuk mendapatkan daftar file untuk perbandingan.
Saya juga lupa menambahkan bahwa saya melakukan '\ ls' untuk menonaktifkan sementara alias saya ke GNU ls sehingga saya kehilangan info pemformatan warna dari daftar yang dikembalikan oleh GNU ls.
sumber
ls
:for i in ./dir1/*
Berikut ini skrip untuk menunjukkan perbedaan antar file dalam dua folder. Ini bekerja secara rekursif. Ubah dir1 dan dir2.
sumber
Jika Anda secara khusus tidak ingin membandingkan konten file dan hanya memeriksa mana yang tidak ada di kedua direktori, Anda dapat membandingkan daftar file, yang dihasilkan oleh perintah lain.
-printf '%P\n'
memberitahufind
untuk tidak awalan jalur keluaran dengan direktori root.Saya juga menambahkan
sort
untuk memastikan urutan file akan sama di kedua panggilanfind
.Pada
grep
akhirnya menghapus informasi tentang jalur input yang identik.sumber
Coba ini:
sumber