Dette spørsmålet har allerede svar her :
Kommentarer
Svar
Dette er alternativet -prune
:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Dette sier i utgangspunktet «hvis det er» en katalog kalt avoid_this_directory_please
, ikke skriv den inn, hvis ikke, hvis den «er en vanlig fil, kan du skrive ut stienavnet».
Kommentarer
- jeg skulle skrive det samme, litt annerledes, som
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, men jeg liker syntaksen bedre. Takk. - @TimKennedy Du vil sannsynligvis trenge foreldrene hvis du vil gjøre
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
. - bra poeng. Jeg vet ikke ' ikke engang når / hvor jeg lærte å gjøre det med parentesene. at alderen går tapt i tidenes tåke. 🙂
- Dette vil selvfølgelig beskjære eventuelle kataloger som heter
avoid_this_directory_please
hvor som helst i treet, ikke bare toppnivåer.-path
ville tillate mer kontroll i det, da man-siden ( sitert nedenfor av Xen2050) sier. - Jeg visste ikke at
-prune
vurderte alt etter den førstefind
argument, inkludert-type
og var forvirret over å unnlate å beskjære kataloger medfind / -type f -path /proc -prune -o -name foo -print
. Å se både-type d
og-type f
i samme kommando er det som fikk det til å klikke for meg. Nå føler jeg meg endelig trygg på å brukefind
, takk.
Svar
For å unngå en katalog, prøv -path-testen:
find . -type f ! -path "*/avoid_this_directory_please/*"
Kommentarer
- Merk at mens det forhindrer at filer i
avoid_this_directory_please
blir valgt (med mindre banen inneholder ugyldige tegn), vil det ikke stoppefind
fra å synke der inne . At ' derfor-prune
er bedre her. - Dette er sååååå mye bedre enn å bruke
prune
. Jeg må alltid lese i en halv time for å finne ut hva jeg ikke ønsker ' for å finne og deretter parre med ELLER logikk for å skaffe de filene jeg vil ha. - @ Merlin Det kommer tydeligvis an på hva du vil oppnå. Med
-prune
,find
vant ' t til og med se i de valgte banene, mens med! -path
, det vil fremdeles gå inn i banen og undersøke alt.
Svar
Fra man find
, i -path
-delen, tilsynelatende å kombinere de to andre svarene
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
Svar
Prøv dette
find -name "*.js" -not -path "./directory/*"
Kommentarer
- Dette fungerer hvis du bare leter etter én utvidelsestype. Følgende mislykkes:
find -name "*.js" -o -name "*.css" -not -path "./directory/*"
-prune
: det kan være litt forvirrende. Også dette på stackoverflow beskriver hvorfor det ' er en så irriterende ting å bruke.