Jak mohu najít slovo v konkrétních souborech odpovídající vzoru. např. vyhledávání version v CMake* soubory rekurzivně nalezené v aktuálním adresáři.
Přijatá odpověď:
Pokud chcete vidět název souboru a číslo řádku, POSIXly:
find . -name 'CMake*' -type f -exec grep -nF /dev/null version {} +
(nechcete použít ; zde, který by spustil jeden grep na soubor). To je standardní ekvivalent GNUismu:
find . -name 'CMake*' -type f -print0 | xargs -r0 grep -nHF {} +
find (v první), xargs (ve druhém) předá tolik argumentů grep pokud možno bez překročení limitu počtu argumentů, které můžete příkazu předat. Při provádění tohoto rozdělení se může stát, že při posledním běhu bude do grep předán pouze jeden argument v takovém případě grep nevytiskne název souboru. Proto potřebujete /dev/null tam (nebo -H s GNU grep ).
S -type f , uvažujeme pouze běžné soubory (nikoli zařízení, symbolické odkazy, kanály, adresáře…).
Pokud chcete používat GNUismy, můžete použít GNU grep schopnost sestupovat z adresářového stromu:
grep -rHnF --include='CMake*' version .
Nechcete používat -R protože to způsobuje grep sledovat symbolické odkazy při sestupu ze stromu adresářů a čtení ze zařízení, fifos, socketů…
Tato verze je bezpečnější a efektivnější, ale není přenosná.