Deze vraag heeft hier al antwoorden :

Reacties

  • Daar ' sa dozijn vragen over de problemen met het gebruik van -prune: het kan een beetje verwarrend zijn. Ook dit op stackoverflow beschrijft waarom het ' zo vervelend is om te gebruiken.
  • Zelfs als dit een dupe is, is het beste antwoord hier duidelijker dan het beste antwoord op de " juiste " vraag.
  • Hmm, " find -prune isn ' t voor mij werken " klinkt zeker anders dan " hoe sluit ik mappen uit van de zoekuitvoer? " voor mij …
  • @SamB Akkoord , dit kan ' mogelijk geen duplicaat zijn.

Antwoord

Dit is waar de -prune optie voor is:

find . -type d -name "avoid_this_directory_please" -prune -o -type f -print 

Dit zegt in feite “als er een map is” genaamd avoid_this_directory_please, voer het niet “in, anders, als het” een normaal bestand is, druk dan de padnaam af “.

Opmerkingen

  • ik zou hetzelfde schrijven, iets anders, als find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \), maar ik vind je syntaxis beter. Bedankt.
  • @TimKennedy Je zou waarschijnlijk de parens nodig hebben als je find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print zou willen doen.
  • goed punt. ik weet niet ' zelfs niet wanneer / waar ik heb geleerd om het te doen met de haakjes. die leeftijd gaat verloren in de mist van de tijd. 🙂
  • Dit zal natuurlijk alle mappen met de naam avoid_this_directory_please overal in de boom verwijderen, niet alleen de mappen op het hoogste niveau. -path zou daarin meer controle mogelijk maken, aangezien de man-pagina ( hieronder geciteerd door Xen2050) staten.
  • Ik wist niet dat -prune alles na de eerste find argument, inclusief -type en was verbaasd over het niet opschonen van mappen met find / -type f -path /proc -prune -o -name foo -print. Het zien van beide -type d en -type f in hetzelfde commando is wat ervoor zorgde dat het voor mij klikte. Nu heb ik eindelijk vertrouwen in het gebruik van find, bedankt.

Antwoord

Om een map te vermijden, probeer de -path-test:

find . -type f ! -path "*/avoid_this_directory_please/*" 

Reacties

  • Merk op dat hoewel het voorkomt dat bestanden in avoid_this_directory_please worden geselecteerd (tenzij hun pad ongeldige tekens bevat), zal het niet voorkomen dat find daar naar beneden gaat . Dat ' is waarom -prune hier beter is.
  • Dit is zooooo veel beter dan prune. Ik moet altijd een half uur lezen om erachter te komen wat ik niet ' niet wil zoeken en vervolgens koppelen met OR-logica om de bestanden te verkrijgen die ik wil.
  • @Merlin Het hangt natuurlijk af van wat je wilt bereiken. Met -prune, find won ' zelfs niet in de geselecteerde paden, terwijl met ! -path, zou het nog steeds het pad invoeren en alles onderzoeken.

Antwoord

Van man find, in de -path sectie, blijkbaar een combinatie van de andere 2 antwoorden

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 

Antwoord

Probeer dit

find -name "*.js" -not -path "./directory/*" 

Reacties

  • Dit werkt als je maar naar één extensie zoekt. Het volgende zal mislukken: find -name "*.js" -o -name "*.css" -not -path "./directory/*"

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *