Jika saya ingin menemukan perbedaan antara dua pohon direktori, saya biasanya hanya menjalankan:
diff -r dir1/ dir2/
Ini menghasilkan persis apa perbedaan antara file yang sesuai. Saya tertarik hanya mendapatkan daftar file yang sesuai yang isinya berbeda. Saya berasumsi bahwa ini hanyalah masalah meneruskan opsi baris perintah diff
, tetapi saya tidak dapat menemukan apa pun di halaman manual.
Ada saran?
dircmp
perintah pada unix (bukan linux)Jawaban:
Anda mengatakan Linux, jadi Anda beruntung (setidaknya itu harus tersedia, tidak yakin kapan ditambahkan):
Sebaiknya lakukan apa yang Anda butuhkan.
Jika Anda juga ingin melihat perbedaan untuk file yang mungkin tidak ada di direktori mana pun:
sumber
diff -qr dir1/ dir2/
dan versi saya diperpanjang untukdiff -qr dir1/ dir2/ | grep ' differ'
--brief
pintasannya saja-q
.--brief
.-brief
diartikan sebagai-b -r -i -e -f
, dengan kata lain sebagai satu set bendera bukan sebagai opsi tunggal.Perintah yang saya gunakan adalah:
Persis sama dengan Markus :) Tapi jawabannya mengganggu saya karena menggunakan berbagai jenis bendera, dan itu membuat saya terlihat dua kali. Menggunakan lebih banyak tanda verbose dari Mark akan menjadi:
Saya minta maaf karena memposting ketika jawaban lain benar-benar dapat diterima. Tidak bisa menahan diri ... berusaha untuk tidak terlalu menyombongkan diri.
sumber
q
berdiri? Apakah ini singkatan dari sesuatu? Saya tidak dapat menemukan logika di balikq
..q
itu untukquiet
, umumnya berarti kurang bertele-tele.Saya suka menggunakan
git diff --no-index dir1/ dir2/
, karena itu dapat menunjukkan perbedaan warna (jika Anda memiliki opsi yang diatur dalam konfigurasi git Anda) dan karena itu menunjukkan semua perbedaan dalam output paging panjang menggunakan "kurang".sumber
--no-index
lebih banyak di stackoverflow.com/a/1792477/473390 . Saya sudah memperbarui jawaban alan-porter.--name-status
ke baris perintah, itu hanya akan menampilkan daftar nama file dengan bendera "M / A / D" untuk status Dimodifikasi / Ditambahkan / Dihapus.Kedua perintah ini pada dasarnya melakukan hal yang diminta:
Pilihan di antara mereka tergantung pada lokasi dir1 dan dir2:
Ketika direktori berada pada dua drive yang terpisah, diff mengungguli rsync. Tetapi ketika dua direktori yang dibandingkan berada di drive yang sama, rsync lebih cepat. Itu karena diff menempatkan beban yang hampir sama pada kedua direktori secara paralel, memaksimalkan beban pada kedua drive.
rsync menghitung checksum dalam potongan besar sebelum benar-benar membandingkannya. Itu mengelompokkan operasi i / o dalam potongan besar dan mengarah ke pemrosesan yang lebih efisien ketika semuanya terjadi pada satu drive.
sumber
rsync --options /usr /bin /var /sbin /lib /old_root
secara efektif akan membandingkan root saat ini/
(dengan menentukan semua subdirs di dalamnya) dan/old_root
(berisi misalnya beberapa cadangan yang lebih tua/
), yang merupakan sesuatu yangdiff -r
dapat bisa. Dan jika Anda menganggap bahwa file dengan ukuran, izin, dan cap waktu yang sama mungkin belum berubah, meninggalkannya--checksum
akan memberi Anda kecepatan yang sangat tinggi (jika tidak sampai selesai) memeriksa file mana yang mungkin telah berubah.--delete
denganrsync
?--dry-run
benderanya) tidak ada yang benar-benar dihapus,rsync
hanya mencetak file mana yang dalam dir1 tetapi tidak dalam dir2--dry-run
selalu agar tidak sengaja melupakannya.Meld juga merupakan alat yang hebat untuk membandingkan dua direktori:
meld dir1/ dir2/
Meld memiliki banyak opsi untuk membandingkan file atau direktori. Jika dua file berbeda, mudah untuk masuk ke mode perbandingan file dan melihat perbedaan yang tepat.
sumber
meld
menjadi sangat lambat jika digunakan pada direktori besar. Apakah ada yang menangani direktori besar dengan lebih baik?find dir1 dir2 | cut -d/ -f2- | sort | uniq --unique
meld <(find dir1 -ls ) <(find dir2 -ls)
berfungsi dengan cukup baik, menggunakan substitusi proses bash. (=(command)
Karya zsh bahkan lebih baik.)'Tagihan' rekan senegaranya (dari freenode / # centos fame) membagikan metodenya kepada saya:
Termasuk direktori maju slash terakhir tidak masalah.
Selain itu, tampaknya
-u
opsi ini tidak tersedia pada beberapa versi diff server lama.Perbedaan dalam diffs:
sumber
--new-file/-N
yang membuat diff menganggap file yang hilang menjadi kosong dan--text/-a
yang membuatnya menganggap semua input biner sebagai teks. Saya tidak melihat sisi positif dari use case khusus ini.Diffoscope adalah alat diff direktori berbasis perintah yang hebat.
Saya terutama suka tentang hal itu yang dapat berbeda menjadi file:
Ini tidak hanya memberi tahu Anda file mana yang berbeda, tetapi juga bagaimana mereka berbeda.
sumber
Untuk menemukan perbedaan, gunakan perintah ini:
-r akan mengubah semua subdirektori juga -q memberitahu diff untuk melaporkan hanya ketika file berbeda.
--brief akan menampilkan file yang dosent ada di direktori.
Atau
kita dapat menggunakan Meld yang akan ditampilkan di jendela grafis yang mudah untuk menemukan perbedaannya.
sumber
--brief
dan-q
merupakan opsi yang sama. Pernyataan Anda membuatnya terdengar seperti berbeda tetapi tidak.Anda juga dapat menggunakan
Rsync
danfind
. Untukfind
:Tetapi file dengan nama dan subfolder yang sama, tetapi dengan konten yang berbeda, tidak akan ditampilkan dalam daftar.
Jika Anda adalah penggemar GUI, Anda dapat memeriksa Meld yang disebutkan @Alexander . Ini berfungsi baik di windows dan linux.
sumber
Untuk melaporkan perbedaan antara dirA dan dirB, sambil memperbarui / menyinkronkan.
rsync -auv <dirA> <dirB>
sumber