To pytanie ma już tutaj odpowiedzi :
Komentarze
Odpowiedź
Do tego służy opcja -prune
:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Zasadniczo mówi to „jeśli istnieje” katalog o nazwie avoid_this_directory_please
, nie wpisuj go, w przeciwnym razie, jeśli jest to „zwykły plik, wypisz jego ścieżkę”.
Komentarze
- zamierzałem napisać to samo, nieco inaczej, co
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, ale bardziej podoba mi się twoja składnia. Dzięki.
- @TimKennedy Prawdopodobnie będziesz potrzebować paren, jeśli chcesz zrobić
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
.
- Dobra uwaga. Nie ' nawet nie wiem, kiedy / gdzie nauczyłem się tego robić, używając nawiasów. ten wiek jest zagubiony we mgle czasu. 🙂
- Spowoduje to oczywiście usunięcie wszystkich katalogów o nazwie
avoid_this_directory_please
w dowolnym miejscu w drzewie, a nie tylko tych najwyższego poziomu. -path
umożliwiłby większą kontrolę w tym zakresie, ponieważ strona podręcznika ( cytowany poniżej przez Xen2050).
- Nie wiedziałem, że
-prune
bierze pod uwagę wszystko po pierwszym find
, w tym -type
i był zdziwiony, że nie udało się przyciąć katalogów za pomocą find / -type f -path /proc -prune -o -name foo -print
. Widząc zarówno -type d
, jak i -type f
w tym samym poleceniu, kliknęło ono za mnie. Teraz w końcu czuję się pewnie, używając find
, dziękuję.
Odpowiedź
Aby uniknąć katalogu, wypróbuj -path test:
find . -type f ! -path "*/avoid_this_directory_please/*"
Komentarze
Odpowiedź
Z man find
, w sekcji -path
, najwyraźniej łącząc pozostałe 2 odpowiedzi
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
Odpowiedź
Spróbuj tego
find -name "*.js" -not -path "./directory/*"
Komentarze