Dette spørgsmål har allerede svar her :
Kommentarer
Svar
Dette er, hvad -prune
er til:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Dette siger grundlæggende “hvis der er” en mappe kaldes avoid_this_directory_please
, indtast den ikke, ellers skal den “være en almindelig fil, skal du udskrive stienavnet”.
Kommentarer
- Jeg ville skrive den samme ting, lidt anderledes, som
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, men jeg kan godt lide din syntaks bedre. Tak. - @TimKennedy Du ville sandsynligvis have brug for forældrene, hvis du ville gøre
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
. - godt punkt. Jeg ved ikke ' ikke engang hvornår / hvor jeg lærte at gøre det med parenteserne. denne alder går tabt i tidens tåge. 🙂
- Dette beskærer naturligvis alle mapper, der hedder
avoid_this_directory_please
hvor som helst i træet, ikke kun dem på øverste niveau.-path
giver mulighed for mere kontrol i det, da man-siden ( citeret nedenfor af Xen2050) siger. - Jeg vidste ikke, at
-prune
overvejede alt efter den førstefind
argument, inklusive-type
og var forvirret over ikke at beskære mapper medfind / -type f -path /proc -prune -o -name foo -print
. At se både-type d
og-type f
i den samme kommando er det, der fik det til at klikke for mig. Nu føler jeg mig endelig sikker på at brugefind
tak.
Svar
For at undgå en mappe, prøv -path-testen:
find . -type f ! -path "*/avoid_this_directory_please/*"
Kommentarer
- Bemærk, at mens det forhindrer, at filer i
avoid_this_directory_please
vælges (medmindre deres sti indeholder ugyldige tegn), forhindrer det ikkefind
i at falde derinde . At ' hvorfor-prune
er bedre her. - Dette er såååå meget bedre end at bruge
prune
. Jeg er altid nødt til at læse i en halv time for at finde ud af, hvad jeg ikke ' ikke vil finde, og derefter parre med ELLER logik for at få de filer, jeg ønsker. - @ Merlin Det afhænger naturligvis af, hvad du vil opnå. Med
-prune
, vandtfind
' t selv i de valgte stier, mens med! -path
, det vil stadig komme ind i stien og undersøge alt.
Svar
Fra man find
, i sektionen -path
, tilsyneladende en kombination af de to andre svar
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 kun er på udkig efter en udvidelsestype. Følgende mislykkes:
find -name "*.js" -o -name "*.css" -not -path "./directory/*"
-prune
: det kan være lidt forvirrende. Også dette på stackoverflow beskriver, hvorfor det ' er sådan en irriterende ting at bruge.