Bagaimana saya bisa menemukan setiap file dan direktori yang cocok dengan suatu pola, kecuali satu direktori menggunakan find
?
Katakanlah saya memiliki struktur file berikut;
. foo-exclude-me/ foo.txt foo-exclude-me-not/ foo.txt bar/ 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:
find . -name 'foo-exclude-me' -prune -o -name 'foo*' find . -name 'foo*' ! -path './foo-exclude-me/*'
tapi 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
. dengan benar direktori?
Jawaban yang Diterima:
find . -name 'foo-exclude-me' -prune -o -name 'foo*' -print
Tanpa -print
, tindakan default implisit berlaku untuk setiap kecocokan, bahkan yang dipangkas. -print
explicit eksplisit hanya berlaku di bawah kondisi yang ditentukan, yaitu -name 'foo*'
hanya di cabang lain -name 'foo-exclude-me'
.
Secara umum, gunakan -print
yang eksplisit setiap kali Anda melakukan sesuatu yang lebih kompleks daripada gabungan predikat.
Upaya kedua Anda dengan ! -path './foo-exclude-me/*'
tidak berfungsi karena ./foo-exclude-me
tidak cocok dengan ./foo-exclude-me/*
(tidak ada /
trail yang tertinggal ). Menambahkan ! -path ./foo-exclude-me
akan berhasil.