Kullanım
find \( -path "./tmp" -o -path "./scripts" \) -prune -o -name "*_peaks.bed" -print
veya
find \( -path "./tmp" -o -path "./scripts" \) -prune -false -o -name "*_peaks.bed"
veya
find \( -path "./tmp" -path "./scripts" \) ! -prune -o -name "*_peaks.bed"
Sıra önemlidir. Soldan sağa doğru değerlendirir. Her zaman yol dışlama ile başlayın.
Açıklama
Tüm dizini dışarıda bırakmak için -not
(veya !
) kullanmayın . Kullanın -prune
. Kılavuzda açıklandığı gibi:
−prune The primary shall always evaluate as true; it
shall cause find not to descend the current
pathname if it is a directory. If the −depth
primary is specified, the −prune primary shall
have no effect.
ve GNU'da kılavuzu bulun:
-path pattern
[...]
To ignore a whole
directory tree, use -prune rather than checking
every file in the tree.
Aslında, kullanırsanız -not -path "./pathname"
, bul, altındaki her düğüm için ifadeyi değerlendirecektir."./pathname"
.
bulma ifadeleri sadece koşul değerlendirmesidir.
\( \)
- grupların çalışması (kullanabilirsiniz -path "./tmp" -prune -o -path "./scripts" -prune -o
, ancak daha ayrıntılıdır).
-path "./script" -prune
- eğer -path
gerçek döner ve bir dizin, yani dizin için gerçek dönmek ve do not içine inerler.
-path "./script" ! -prune
- olarak değerlendirir (-path "./script") AND (! -prune)
. Bu erik "her zaman doğru" yu daima yanlışa döndürür. Yazdırmayı önler"./script"
.
-path "./script" -prune -false
- -prune
her zaman doğru döndüğünden -false
, aynısını yapmak için takip edebilirsiniz!
.
-o
- VEYA operatörü. İki ifade arasında hiçbir operatör belirtilmezse, varsayılan olarak AND işlecidir.
Bu nedenle, \( -path "./tmp" -o -path "./scripts" \) -prune -o -name "*_peaks.bed" -print
şu şekilde genişletilir:
[ (-path "./tmp" OR -path "./script") AND -prune ] OR ( -name "*_peaks.bed" AND print )
Baskı burada önemlidir çünkü o olmadan şu şekilde genişletilir:
{ [ (-path "./tmp" OR -path "./script" ) AND -prune ] OR (-name "*_peaks.bed" ) } AND print
-print
bul ile eklenir - bu nedenle çoğu zaman ifadenize eklemeniz gerekmez. Dan beri-prune
true döndürdüğünden, "./script" ve "./tmp" yazacaktır.
Diğerlerinde gerekli değil çünkü değiştirdik -prune
her zaman yanlış döndürmeye .
İpucu: Hangi yolun kontrol edildiğini find -D opt expr 2>&1 1>/dev/null
görmek için nasıl optimize edildiğini ve genişletildiğini görmek için kullanabilirsiniz
find -D search expr 2>&1 1>/dev/null
.
_peaks.bed
.