Estou tentando fazer uma pesquisa de texto em alguns arquivos que compartilham uma estrutura de diretório semelhante, mas não estão na mesma árvore de diretório, no GNU / Linux.
Eu tenho um servidor web com muitos sites que compartilham a mesma estrutura em árvore (estrutura PHP do Code Igniter MVC), então quero pesquisar em um diretório específico na árvore para cada site, por exemplo:
/srv/www/*/htdocs/system/application/
Onde * é o nome do site. E a partir desses diretórios de aplicativos , eu quero procurar em toda a árvore até as folhas, um arquivo * .php que tenha algum padrão de texto, digamos "debug (", nenhuma expressão regular é necessária.
Eu sei usar find e grep, mas não sou bom em combiná-los.
Como eu faria isso?
Desde já, obrigado!
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep "debug ("
GNU find
pode ser necessário que o+
operador\;
execute o mesmo tipo de execução de processo único que oxargs
faz. Assim,find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep -H "debug (" {} +
faz o mesmo que oxargs
exemplo nesta resposta, mas com menos uma bifurcação de processo (e ainda o risco de 0 para problemas de nome de arquivo).find
nem mesmo é necessário para este exemplo, é possível usargrep
diretamente (pelo menosGNU grep
):e estamos limitados a um único garfo de processo.
Opções:
-R, --dereference-recursive Read all files under each directory, recursively. Follow all symbolic links, unlike -r.
-H, --with-filename Print the file name for each match. This is the default when there is more than one file to search.
--include=GLOB Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).
--exclude=GLOB Skip any command-line file with a name suffix that matches the pattern GLOB, using wildcard matching; a name suffix is either the whole name, or any suffix starting after a / and before a +non-/. When searching recursively, skip any subfile whose base name matches GLOB; the base name is the part after the last /. A pattern can use *, ?, and [...] as wildcards, and \ to quote a wildcard or backslash character literally.
fonte
-RH
opções significam?man grep
trecho das descrições das opções na postagem.Seu shell pode encontrar os arquivos php e entregá-los ao grep. Na festança:
fonte