GNU/Linux >> Znalost Linux >  >> Linux

Jak vyloučit adresář v find . příkaz

Pokud -prune nefunguje pro vás, toto bude:

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

Upozornění: vyžaduje procházení všech nežádoucích adresářů.


Použijte -prune hlavní. Například pokud chcete vyloučit ./misc :

find . -path ./misc -prune -o -name '*.txt' -print

Chcete-li vyloučit více adresářů, NEBO je vložte do závorek.

find . -type d \( -path ./dir1 -o -path ./dir2 -o -path ./dir3 \) -prune -o -name '*.txt' -print

Chcete-li vyloučit adresáře se specifickým názvem na jakékoli úrovni, použijte -name primární místo -path .

find . -type d -name node_modules -prune -o -name '*.json' -print

Zdá se mi, že následující je jednodušší než jiná navrhovaná řešení:

find build -not \( -path build/external -prune \) -name \*.js
# you can also exclude multiple paths
find build -not \( -path build/external -prune \) -not \( -path build/blog -prune \) -name \*.js

Důležitá poznámka: cesty, které zadáte po -path musí přesně odpovídat hodnotě find tiskne bez vyloučení. Pokud tato věta mate, ujistěte se, že používáte úplné cesty skrz celek příkaz takto:find /full/path/ -not \( -path /full/path/exclude/this -prune \) ... . Chcete-li lépe porozumět, přečtěte si poznámku [1].

Uvnitř \( a \) je výraz, který bude odpovídat přesně build/external (viz důležitá poznámka výše) a v případě úspěchu se vyhnete procházení čehokoli níže . Ten je pak seskupen jako jeden výraz s uvozenými závorkami a předponou -not což udělá find přeskočit vše, co odpovídalo tomuto výrazu.

Někdo by se mohl zeptat, zda přidat -not neskryje všechny ostatní soubory pomocí -prune se znovu objeví a odpověď je ne. Způsob -prune funguje to tak, že cokoli, čeho se po dosažení dosáhne, budou soubory pod tímto adresářem trvale ignorovány.

Toto pochází ze skutečného případu použití, kdy jsem potřeboval zavolat yui-compressor na některé soubory generované Wintersmith, ale vynechat ostatní soubory, které je třeba odeslat tak, jak jsou.

Poznámka [1] :Pokud chcete vyloučit /tmp/foo/bar a spustíte find takto "find /tmp \(... " pak musíte zadat -path /tmp/foo/bar . Pokud na druhou stranu spustíte, najděte takto cd /tmp; find . \(... pak musíte zadat -path ./foo/bar .


Linux
  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Vyloučit adresář v hledání?

  3. Najít vyloučený adresář?

  1. [Linux] :Jak vyloučit adresář při použití příkazu shellu „tar“.

  2. Jak integrovat příkaz MV po příkazu Najít?

  3. Jak mohu vyloučit adresář z příkazu ls

  1. Shell - Jak najít adresář nějakého příkazu?

  2. Jak použít příkaz 'cp' k vyloučení konkrétního adresáře?

  3. Jak zajistím, aby hledání vyloučilo složku, ve které hledá?