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:
.
└── a
├── 1.txt
├── 15.xml
├── 8.dll
├── b
│ ├── 16.xml
│ ├── 2.txt
│ ├── 9.dll
│ └── c
│ ├── 10.dll
│ ├── 17.xml
│ └── 3.txt
├── d
│ ├── 11.dll
│ ├── 18.xml
│ ├── 4.txt
│ └── e
│ ├── 12.dll
│ ├── 19.xml
│ └── 5.txt
└── f
├── 13.dll
├── 20.xml
├── 6.txt
└── g
├── 14.dll
├── 21.xml
└── 7.txt
Anda dapat melakukan sesuatu seperti ini:
## data section, list undesired extensions here
declare -a _BADEXT=(xml dll)
## code section, this never changes
BADEXT="$( IFS="|" ; echo "${_BADEXT[*]}" | sed 's/|/\\|/g' )"
find . -type f ! -regex ".*\.\($BADEXT\)"
Yang mengakibatkan:
./a/1.txt
./a/b/2.txt
./a/b/c/3.txt
./a/d/4.txt
./a/d/e/5.txt
./a/f/6.txt
./a/f/g/7.txt
Anda dapat mengubah daftar ekstensi tanpa mengubah blok kode.
CATATAN tidak berfungsi dengan OSX asli find- gunakan gnu find saja.
-notdapat diganti dengan'!'(Penawaran disarankan). Di sisi lain,-namecase sensitif sedangkan-inamecase sensitif.