xargs
očekává vstup ve formátu, který žádný jiný příkaz nevytváří, takže je těžké jej efektivně používat. Co je zde špatně je, že máte soubor, jehož název musí být uveden na vstupu do xargs
(pravděpodobně obsahující '
).
Pokud váš grep podporuje -r
nebo -R
možnost pro rekurzivní vyhledávání, použijte ji.
grep -r word .
V opačném případě použijte -exec
primární z find
. Toto je obvyklý způsob, jak dosáhnout stejného efektu jako xargs
, s výjimkou bez omezení názvů souborů. Přiměřeně nejnovější verze find
umožňují seskupit několik souborů v jediném volání pomocného příkazu. Předání /dev/null
na grep
zajišťuje, že se před každou shodou zobrazí název souboru, i když je náhodou volán na jediném souboru.
find . -type f -exec grep word /dev/null {} +
Starší verze find
(na starších systémech nebo OpenBSD nebo omezených utilitách, jako je BusyBox) může volat pomocný příkaz pouze na jeden soubor najednou.
find . -type f -exec grep word /dev/null {} \;
Některé verze find
a xargs
mají přípony, které jim umožňují správně komunikovat, pomocí nulových znaků k oddělení názvů souborů, takže nejsou vyžadovány žádné uvozovky. V dnešní době má tuto funkci pouze OpenBSD bez -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
Asi máte na mysli první možnost
grep rekurzivní, pro vyhledávání obsahu uvnitř souborů
grep -R "content_to_search" /path/to/directory
Je rekurzivní, pro vyhledávání souborů, které se shodují
ls -lR | grep "your_search"
Pokud máte nástroje GNU (což máte, pokud je značka Linux přesná), můžete použít -print0
a -0
abyste se vyhnuli obvyklým problémům s citacemi:
find . -type f -print0 | xargs -0 grep word