Tato otázka již má odpovědi zde :

Komentáře

  • Tam ' sa tucet otázek o problémech s používáním -prune: může to být trochu matoucí. Také toto na stackoverflow popisuje, proč je to ' tak nepříjemné používat.
  • I když se jedná o dupe, nejlepší odpověď je zde jasnější než nejlepší odpověď na " správnou " otázku.
  • Hmm, " find -prune nefunguje ' to funguje " jisté zvuky odlišné od " jak mohu vyloučit adresáře z výstupu hledání? " pro mě …
  • @SamB dohodnuto , toto ' nemusí být duplikát.

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ích find 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í tam find . 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/*"

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *