Perbuatan:
diff -r -X <ignore-list> <src-dir> <dest-dir>
tampaknya tidak membuat diff
entri abaikan <ignore-list>
jika isinya berupa <dir>/<file>
.
Entri dari formulir <file
> bagaimanapun dipertimbangkan. Ini adalah masalah karena saya mungkin memiliki beberapa file yang dinamai <file>
dalam sub-direktori yang berbeda, beberapa di antaranya saya tidak ingin diabaikan.
Sepertinya tidak ada banyak informasi mengenai sintaksis pola di manual untuk diff
keduanya. Dari apa yang saya tahu, itu hanya nama-dasar dari sebuah file yang dianggap oleh diff (lihat http://forums.gentoo.org/viewtopic-t-889788-start-0.html jika Anda tertarik).
diff
's--exclude
pilihan begitu menyebalkan ...Jawaban:
Direktori listing harus berfungsi; misalnya, inilah yang saya gunakan dalam sebuah skrip (dengan asumsi gnu diff),
... yang mengabaikan isi
.svn
dan.git
direktori, tetapi juga file individual bernama*.zip
/*.gz
/ etc.Sunting: Untuk memfilter jalur formulir
dir_a/file1
tetapi masihdiff
menggunakan nama file yang sama, sepertidir_b/file1
ataudir_a/b/file1
, maka daftar file yangdiff
harus dihasilkan (misalnya, menggunakanfind
), dan file untuk membandingkan berasal dari jalur ini; mis. diberikanAnda menghasilkan daftar file untuk dibandingkan, tidak termasuk misalnya
*/a/2.txt
tetapi masih membandingkan file lain bernama2.txt
. Cukup "cari" semua file kecualiONE/a/2.txt
(regexp juga dapat digunakan di sini, seperti.*/a/2.txt
)yang berlaku mengabaikan
ONE/a/2.txt
(danTWO/a/2.txt
), tetapi masih membandingkan file lain bernama2.txt
:Sunting: Atau, lebih banyak kesenangan dengan
find
(kesenangan tambahan tersisa sebagai latihan untuk pembaca), pilih file atau direktori yang akan dikecualikan dan kemudian yangdiff
lainnya:Contoh di atas tidak termasuk file spesifik "{top} /a/2.txt", direktori apa pun yang bernama "b", dan yang lainnya berbeda. (Alih-alih sederhana "
-name b
" Anda juga bisa menggunakan "-regex '.*/b'
" - note, no trailing "/".)sumber
exclude
pola dicocokkan dengan nama file file (sesuai gnu.org/software/diffutils/manual/html_node/… ); jalur tidak akan berfungsi (seperti padafoo/bar.txt
). Untuk melakukan itu, Anda mungkin harus menjalankanfind
untuk menghasilkan daftar nama file, dan mendapatkan path ke file untuk membandingkan.diff
, bukan hanya menggunakanbasename
find
, jika input untukdiff
berisi direktori, itu akan melalui dan membandingkan file dalam direktori itu dan beberapa file ini mungkin perlu diabaikan .... jadi Anda kembali ke titik 1.Saya memiliki masalah yang sama jadi saya membuat tambalan untuk
diff
. Patch belum diterima, tetapi Anda dapat membangun versi Anda sendiridiff
dengan patch atau menginstal di Arch Linux dengan paket AUR .Berikut adalah
diff
patch yang.sumber
Untuk mengecualikan direktori
directory/sub-directory
, saya menggunakanNamun, meskipun harus bekerja untuk satu pengecualian, itu tidak mungkin untuk daftar abaikan lama seperti yang Anda miliki.
sumber
sumber