Tato otázka již má odpovědi zde :
Komentáře
Odpovědět
K tomu slouží možnost -prune
:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Toto v podstatě říká adresář „if there“ nazývá se avoid_this_directory_please
, nezadávejte jej, jinak, pokud se jedná o běžný soubor, vytiskněte jeho název cesty.
Komentáře
- Chystal jsem se napsat totéž, trochu jinak, jako
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, ale líbí se mi vaše syntaxe lépe. Díky. - @TimKennedy Pravděpodobně byste potřebovali rodičovství, pokud byste chtěli udělat
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
. - dobrý bod. Ani ' nevím, kdy / kde jsem se to naučil pomocí závorek. ten věk se ztrácí v mlhách času. 🙂
- Tím se samozřejmě oříznou všechny adresáře s názvem
avoid_this_directory_please
kdekoli na stromě, nejen ty nejvyšší úrovně.-path
by v tom umožnil větší kontrolu, protože manuálová stránka ( citováno níže autorem Xen2050). - Nevěděl jsem, že
-prune
zvážil vše po prvníchfind
argument, včetně-type
a byl zmaten tím, že nedokázal ořezat adresáře pomocífind / -type f -path /proc -prune -o -name foo -print
. Vidět-type d
a-type f
ve stejném příkazu je to, co mě přimělo kliknout. Nyní se konečně cítím sebejistě při používánífind
, díky.
Odpovědět
Chcete-li se vyhnout adresáři, vyzkoušejte -path test:
find . -type f ! -path "*/avoid_this_directory_please/*"
Komentáře
- Pamatujte, že zabrání tomu, aby byly soubory uvnitř
avoid_this_directory_please
vybrány (pokud jejich cesta neobsahuje neplatné znaky), nezastaví tamfind
. Proto je ' proč-prune
lepší. - To je o moc lepší než použití
prune
. Vždy musím číst půl hodiny, abych zjistil, co specifikuji, co nechci ' najít a poté spárovat s logikou OR, abych získal soubory, které chci. - @Merlin Zjevně záleží na tom, čeho chcete dosáhnout. S
-prune
find
se ' na vybrané cesty ani nedívám, zatímco s! -path
, stále by vstoupil do cesty a zkoumal všechno.
Odpovědět
Z man find
v části -path
zjevně kombinující další 2 odpovědi
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
Odpověď
Zkuste to
find -name "*.js" -not -path "./directory/*"
Komentáře
- Funguje to, pokud hledáte pouze jeden typ rozšíření. Následující se nezdaří:
find -name "*.js" -o -name "*.css" -not -path "./directory/*"
-prune
: může to být trochu matoucí. Také toto na stackoverflow popisuje, proč je to ' tak nepříjemné používat.