Apakah ada cara sederhana untuk secara rekursif menemukan semua file dalam hierarki direktori, yang tidak berakhir dengan daftar ekstensi? Misalnya semua file yang bukan * .dll atau * .exe
UNIX / GNU menemukan, sekuat itu, tampaknya tidak memiliki exclude
mode (atau saya kehilangan itu), dan saya selalu merasa sulit untuk menggunakan ekspresi reguler untuk menemukan hal-hal yang tidak cocok dengan ekspresi tertentu .
Saya berada di lingkungan Windows (menggunakan port GnuWin32 pada sebagian besar alat GNU), jadi saya sama-sama terbuka untuk solusi Windows saja.
command-line
find
Cristian Diaconescu
sumber
sumber
-not
dapat diganti dengan'!'
(Penawaran disarankan). Di sisi lain,-name
case sensitif sedangkan-iname
case sensitif.sumber
-not
adalah pilihan yang buruk, yang ini!
bekerja dengan baik :)Dua opsi-nama pertama tidak memiliki opsi -print, sehingga dilewati. Semuanya dicetak.
sumber
Anda bisa melakukan sesuatu menggunakan perintah grep:
The
-v
bendera padagrep
khususnya berarti "menemukan hal-hal yang tidak sesuai dengan ungkapan ini."sumber
satu lagi :-)
Unix temukan referensi perintah
sumber
sumber
Linux / OS X:
Mulai dari direktori saat ini, secara rekursif menemukan semua file yang berakhiran .dll atau .exe
Mulai dari direktori saat ini, secara rekursif menemukan semua file yang TIDAK diakhiri dengan .dll atau .exe
Catatan:
(1) Opsi P dalam grep menunjukkan bahwa kita menggunakan gaya Perl untuk menulis ekspresi reguler kita untuk digunakan bersama dengan perintah grep . Untuk tujuan mengeksekusi perintah grep bersama dengan ekspresi reguler, saya menemukan bahwa gaya Perl adalah gaya yang paling kuat di sekitar.
(2) Opsi v di grep menginstruksikan shell untuk mengecualikan file apa pun yang memenuhi ekspresi reguler
(3) $ karakter di akhir mengatakan ".dll $" adalah karakter kontrol pembatas yang memberitahu shell bahwa string nama file diakhiri dengan ".dll"
sumber
Solusi lain pada halaman ini tidak diinginkan jika Anda memiliki daftar ekstensi yang panjang - mempertahankan urutan panjang
-not -name 'this' -not -name 'that' -not -name 'other'
akan membosankan dan rentan kesalahan - atau jika pencarian terprogram dan daftar ekstensi dibuat saat runtime.Untuk situasi tersebut, solusi yang lebih jelas memisahkan data (daftar ekstensi) dan kode (parameter untuk
find
) mungkin diinginkan. Diberikan struktur direktori & file yang terlihat seperti ini:Anda dapat melakukan sesuatu seperti ini:
Yang mengakibatkan:
Anda dapat mengubah daftar ekstensi tanpa mengubah blok kode.
CATATAN tidak berfungsi dengan OSX asli
find
- gunakan gnu find saja.sumber