GNU/Linux >> Znalost Linux >  >> Linux

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

Jak mohu najít každý soubor a adresář odpovídající vzoru, kromě jednoho adresáře pomocí najít ?

Řekněme, že mám následující strukturu souborů;

.
  foo-exclude-me/
    foo.txt
  foo-exclude-me-not/
    foo.txt
  bar/
    foo.txt
    foobar/
      bar.txt
      foofoo.txt

jak bych získal následující výstup pomocí najít :

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt

Zkoušel jsem použít oba následující příkazy:

find . -name 'foo-exclude-me' -prune -o -name 'foo*'
find . -name 'foo*' ! -path './foo-exclude-me/*'

ale oba vrátí toto:

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt

Jak mohu správně vyloučit foo-exclude-me adresář?

Přijatá odpověď:

find . -name 'foo-exclude-me' -prune -o -name 'foo*' -print

Bez -print implicitní výchozí akce se vztahuje na každou shodu, dokonce i na oříznutou. Explicitní -print platí pouze za specifikovaných podmínek, kterými jsou -name 'foo*' pouze ve větvi else -name 'foo-exclude-me' .

Obecně řečeno, použijte explicitní -print kdykoli děláte něco složitějšího než spojení predikátů.

Váš druhý pokus s ! -path './foo-exclude-me/*' nefungovalo, protože ./foo-exclude-me neodpovídá ./foo-exclude-me/* (žádné koncové / ). Přidávání ! -path ./foo-exclude-me by fungovalo.


Linux
  1. Najděte soubor a poté cd do tohoto adresáře v Linuxu

  2. Najděte a přejmenujte adresář

  3. Jak najít adresář Hadoop hdfs v mém systému?

  1. rekurzivní grep:vyloučení konkrétních adresářů

  2. Nalezení adresáře v linuxovém terminálu

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

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

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

  3. Vyloučit seznam souborů z hledání