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á.