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í