Bagaimana saya dapat menemukan setiap file dan direktori yang cocok dengan suatu pola, tidak termasuk satu direktori menggunakan find
?
Katakanlah saya memiliki struktur file berikut;
. foo-exclude-me / foo.txt foo-exclude-me-not / foo.txt batang/ foo.txt foobar / bar.txt foofoo.txt
bagaimana saya mendapatkan output berikut menggunakan find
:
./bar/foo.txt ./bar/foobar ./bar/foobar/foofoo.txt ./foo-exclude-me-not ./foo-exclude-me-not/foo.txt
Saya telah mencoba menggunakan kedua perintah berikut:
Temukan . -nama 'foo-kecualikan-saya' -prune -o -name 'foo *' Temukan . -nama 'foo *' \! -path './foo-exclude-me/*'
tetapi keduanya mengembalikan ini:
./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt
Bagaimana saya bisa mengecualikan foo-exclude-me
direktori dengan benar?
foo-exclude-me
sebagai ganti./foo-exclude-me
. Coba juga tambahkan-print
di akhir perintah.-print
danfoo-exclude-me
bukannya./foo-exclude-me
.Jawaban:
Tanpa
-print
, tindakan default implisit berlaku untuk setiap pertandingan, bahkan yang dipangkas. Secara eksplisit-print
hanya berlaku di bawah kondisi yang ditentukan, yang-name 'foo*'
hanya di cabang lain dari-name 'foo-exclude-me'
.Secara umum, gunakan eksplisit
-print
setiap kali Anda melakukan sesuatu yang lebih kompleks daripada gabungan predikat.Upaya kedua Anda dengan
! -path './foo-exclude-me/*'
tidak berhasil karena./foo-exclude-me
tidak cocok./foo-exclude-me/*
(tidak ada jejak/
). Menambahkan! -path ./foo-exclude-me
akan berhasil.sumber
sumber
-prune
itu relevan.-prune
adalah salah satu opsi paling berbelit-belit untukfind
'menyebabkannya dinonaktifkan-print
(yang diaktifkan secara default)