Deze vraag heeft hier al antwoorden :
Reacties
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 eerstefind
argument, inclusief-type
en was verbaasd over het niet opschonen van mappen metfind / -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 vanfind
, 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 datfind
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/*"
-prune
: het kan een beetje verwarrend zijn. Ook dit op stackoverflow beschrijft waarom het ' zo vervelend is om te gebruiken.