Dette spørgsmål har allerede svar her :

Kommentarer

  • Der ' sa dusin spørgsmål om problemerne med at bruge -prune: det kan være lidt forvirrende. Også dette på stackoverflow beskriver, hvorfor det ' er sådan en irriterende ting at bruge.
  • Selvom dette er en bedrageri, er det bedste svar her klarere end det bedste svar på " korrekt " spørgsmål.
  • Hmm, " find -prune er ikke ' t arbejder for mig " lyder sikkert forskellig fra " hvordan udelukker jeg kataloger fra find output? " for mig …
  • @SamB Aftalt , dette kan ' muligvis ikke være en duplikat.

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ørste find argument, inklusive -type og var forvirret over ikke at beskære mapper med find / -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 bruge find 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 ikke find 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, vandt find ' 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/*"

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *