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í