Această întrebare are deja răspunsuri aici :
Comentarii
Răspuns
Pentru asta este opțiunea -prune
:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Aceasta spune practic „dacă există” un director numit avoid_this_directory_please
, nu-l introduceți, în caz contrar, dacă este „un fișier obișnuit, imprimați calea”.
Comentarii
- aveam de gând să scriu același lucru, ușor diferit, ca
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, dar îmi place sintaxa ta mai bine. Mulțumim.
- @TimKennedy Probabil că ai avea nevoie de părinți dacă ai vrea să faci
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
.
- punct bun. Nu știu ' nici măcar când / unde am învățat să o fac cu paranteze. acea vârstă se pierde în negura timpului. 🙂
- Acest lucru, desigur, va elimina orice directoare numite
avoid_this_directory_please
oriunde în arbore, nu doar cele de nivel superior. -path
ar permite mai mult control în acest sens, ca pagina manuală ( citat mai jos de Xen2050) afirmă.
- Nu știam că
-prune
a luat în considerare totul după primul find
argument, inclusiv -type
și a fost nedumerit că nu a reușit să elimine directoare cu find / -type f -path /proc -prune -o -name foo -print
. Vederea atât a -type d
, cât și a -type f
în aceeași comandă este ceea ce l-a făcut să facă clic pentru mine. Acum, în sfârșit, mă simt încrezător să folosesc find
, mulțumesc.
Răspunde
Pentru a evita un director, încercați testul -path:
find . -type f ! -path "*/avoid_this_directory_please/*"
Comentarii
Răspuns
Din man find
, în secțiunea -path
, combinând aparent celelalte 2 răspunsuri
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
Răspuns
Încercați acest lucru
find -name "*.js" -not -path "./directory/*"
Comentarii