<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Denna fråga har redan svar här :

Kommentarer

  • Där ' sa dussin frågor om problemen med att använda -prune: det kan vara lite förvirrande. Även detta på stackoverflow beskriver varför det ' är en så irriterande sak att använda.
  • Även om detta är en bedrägeri är det bästa svaret här tydligare än det bästa svaret på " rätt " -frågan.
  • Hmm, " find -prune isn ' t fungerar för mig " säkert ljud skiljer sig från " hur utesluter jag kataloger från att hitta utdata? " för mig …
  • @SamB överens , detta kan ' t vara en duplikat.

Svar

Det här är alternativet -prune:

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

Detta säger i princip ”om det finns” en katalog kallas avoid_this_directory_please, ange inte den, annars, om den ”är en vanlig fil, skriv ut sökvägen”.

Kommentarer

  • Jag skulle skriva samma sak, lite annorlunda, som find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \), men jag gillar din syntax bättre. Tack.
  • @TimKennedy Du skulle förmodligen behöva föräldrarna om du vill göra find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print.
  • bra poäng. Jag vet inte ' inte ens när / var jag lärde mig att göra det med parenteserna. den åldern går förlorad i tidens dimma. 🙂
  • Detta beskärar naturligtvis alla kataloger som heter avoid_this_directory_please var som helst i trädet, inte bara toppnivåer. -path skulle möjliggöra mer kontroll i det, eftersom man-sidan ( citeras nedan av Xen2050) säger.
  • Jag visste inte att -prune övervägde allt efter den första find argument, inklusive -type och var förbryllad över att inte skära kataloger med find / -type f -path /proc -prune -o -name foo -print. Att se både -type d och -type f i samma kommando är det som fick det att klicka för mig. Nu känner jag mig äntligen säker på att använda find, tack.

Svar

För att undvika en katalog, testa -path-testet:

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

Kommentarer

  • Observera att medan det förhindrar att filer i avoid_this_directory_please väljs (såvida inte deras sökväg innehåller ogiltiga tecken), kommer det inte att hindra find från att sjunka där inne . Det är ' varför -prune är bättre här.
  • Detta är sååååå mycket bättre än att använda prune. Jag måste alltid läsa en halvtimme för att ta reda på vad jag inte vill ' för att hitta och sedan para med ELLER-logik för att få de filer jag vill ha.
  • @ Merlin Det beror självklart på vad du vill uppnå. Med -prune vann find ' t jämn i de valda banorna, medan med ! -path, det skulle fortfarande gå in på sökvägen och undersöka allt.

Svar

Från man find, i avsnittet -path, som tydligen kombinerar de andra 2 svaren

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

Prova detta

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

Kommentarer

  • Detta fungerar om du bara letar efter en typ av tillägg. Följande misslyckas: find -name "*.js" -o -name "*.css" -not -path "./directory/*"

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *