Dette spørsmålet har allerede svar her :

Kommentarer

  • Der ' sa dusin spørsmål om problemene med å bruke -prune: det kan være litt forvirrende. Også dette på stackoverflow beskriver hvorfor det ' er en så irriterende ting å bruke.
  • Selv om dette er en lure, er det beste svaret her klarere enn det beste svaret på " riktig " -spørsmålet.
  • Hmm, " finn -prune er ikke ' t fungerer for meg " sikkert lyder forskjellig fra " hvordan ekskluderer jeg kataloger fra finne utdata? " for meg …
  • @SamB Avtalt , dette kan ' t muligens være et duplikat.

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ørste find argument, inkludert -type og var forvirret over å unnlate å beskjære kataloger med find / -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å å bruke find, 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 stoppe find 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/*"

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *