
Estou usando o Solaris 10 e tenho duas grep
versões, uma em /usr/bin
e outra em /usr/xpg4/bin
. Tenho procurado uma resposta sobre como pesquisar texto em arquivos em subpastas de um diretório pai usando grep
. Todas as respostas falam sobre -r
opções -R
que não tenho disponíveis na minha versão do grep
.
Responder1
A sintaxe padrão (POSIX) é:
find /path/to/parent -type f -exec grep 'XXX' /dev/null {} +
( /dev/null
é para garantir que grep
sempre imprima um nome de arquivo). Isso funcionará em todos os sistemas POSIX, incluindo Solaris. Os únicos sistemas pós-anos 90 conhecidos onde isso não funciona são os sistemas GNU antigos (muito antigos agora).
O GNU inicialmente introduziu um -print0
predicado e uma -0
opção xargs
para isso:
find /path/to/parent -type f -print0 | xargs -0 grep 'XXX' /dev/null
Existem agora algumas outras implementações que suportam isso, mas não o Solaris.
Acima, em teoria, você gostaria de adicionar -r
uma opção para evitar a execução grep
se não houver arquivo, mas isso não é tãoportátile neste caso específico, não faz diferença funcional
Responder2
Usando GNU grep
(se instalado):
ggrep -A3 -B23 'word' -R /log/
Isso verificará todos os arquivos da pasta se a expressão regular word
corresponde e mostrará a saída junto com o caminho do arquivo.
GNU grep
suporta a -R
bandeira.
Responder3
Basta usar o ggrep que no solaris existe em /usr/sfw/bin/ggrep
um caminho como este:
/usr/sfw/bin/ggrep -H 'search-term' <file-name>*
ele pesquisa seu termo de pesquisa em um grupo de nomes de arquivos começando com uma palavra específica.