Erre a kérdésre már itt vannak válaszok :
megjegyzések
Válasz
Erre szolgál a -prune
opció:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Ez alapvetően azt mondja, hogy “ha van”, akkor a könyvtár avoid_this_directory_please
nevű, ne írja be, különben, ha “normál fájl, nyomtassa ki az útvonal nevét”.
Megjegyzések
- ugyanazt fogtam írni, kissé másként, mint
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, de a szintaxisom jobban tetszik. Köszönöm. - @TimKennedy Valószínűleg szükséged lesz a szülőre, ha
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
. - jó pontot akarsz tenni. Nem is tudom, hogy mikor / hol tanultam meg ezt zárójelekkel megtenni. az a kor elvész az idő ködében. 🙂
- Ez természetesen levágja a
avoid_this_directory_please
nevű könyvtárakat, bárhol a fán, nem csak a legfelső szintű könyvtárakat. A-path
nagyobb ellenőrzést tesz lehetővé ebben, mivel a man oldal ( alább idézi Xen2050) állítja. - Nem tudtam, hogy
-prune
mindent figyelembe vett az első argumentum, ide értve a-type
kifejezést, és értetlenkedett, hogy nem sikerült metszeni a könyvtárakat afind / -type f -path /proc -prune -o -name foo -print
paranccsal. A-type d
és a-type f
azonos parancsban való látása késztette számomra a kattintásra. Most végre biztos vagyok benne, hogy köszönöm afind
alkalmazást.
Válasz
A könyvtár elkerülése érdekében próbálja ki a -path tesztet:
find . -type f ! -path "*/avoid_this_directory_please/*"
Megjegyzések
- Vegye figyelembe, hogy bár megakadályozza a (z)
avoid_this_directory_please
fájlok kiválasztását (kivéve, ha útvonaluk érvénytelen karaktereket tartalmaz), nem akadályozza meg afind
lemerülést odabent. . Ez az ' s ezért jobb itt a-prune
. - Ez sokkal jobb, mint a . Mindig fél órát kell olvasnom, hogy kitaláljam, mit adok meg ', amit nem akarok megtalálni, majd párosítom az OR logikával, hogy megszerezzem a kívánt fájlokat.
- @Merlin Nyilvánvalóan attól függ, hogy mit akarsz elérni. A
-prune
funkcióvalfind
nem nyert ' még a kiválasztott útvonalakat sem, míg a! -path
, akkor is megadná az utat és mindent megvizsgálna.
Válasz
A (z) man find
felől, a -path
szakaszban láthatóan ötvözi a másik 2 választ
To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs" and all files and directories under it, and print the names of the other files found, do something like this: find . -path ./src/emacs -prune -o -print
Válasz
Próbálja ki ezt
find -name "*.js" -not -path "./directory/*"
Megjegyzések
- Ez akkor működik, ha csak egy bővítménytípust keres. A következő nem fog sikerülni:
find -name "*.js" -o -name "*.css" -not -path "./directory/*"
-prune
használatával kapcsolatos problémákról: kissé zavaró lehet. Szintén ez a stackoverflow-n leírja, hogy miért ' ilyen bosszantó dolog használni.