<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">
Denna fråga har redan svar här :
Kommentarer
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örstafind
argument, inklusive-type
och var förbryllad över att inte skära kataloger medfind / -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ändafind
, 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 hindrafind
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
vannfind
' 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/*"
-prune
: det kan vara lite förvirrande. Även detta på stackoverflow beskriver varför det ' är en så irriterande sak att använda.