Trabalhando com o xenserver, e quero executar um comando em cada arquivo que está em um diretório, recebendo algumas coisas da saída do comando e anexando-o a um arquivo.
Eu sou claro sobre o comando que quero usar e como exibir as strings, conforme necessário.
Mas o que não estou claro é como faço para executar este comando em cada arquivo, indo para o próximo, até que não sejam encontrados mais arquivos.
grep $PATTERN *.cpp *.h
. Se você precisar de regras mais específicas para quais arquivos devem ser recebidos, use ofind
comando (verifique a resposta de Rob).grep -r x .
resultados, venho de todos os arquivos de todas as extensões. Se eu correr,grep -r x *.scss
não recebo resultados.*.scss
arquivos no diretório atual, mas em algum lugar mais profundo nos subdiretórios, para que o grep não procure em todos os arquivos que você queria. Você deve usar a--include
opção para dizer ao grep para procurar recursivamente arquivos que correspondam a padrões específicos:grep -r x --include '*.scss' .
(observe as aspas, elas impedem que o padrão seja expandido pelo shell). Ou apenas usefind
(veja a resposta de Rob).No Linux, eu normalmente uso esse comando para grep recursivamente um determinado texto em um diretório
Onde,
r = recursivo, ou seja, subdiretórios de pesquisa no diretório atual
n = para imprimir os números de linha em stdout
i = pesquisa sem distinção entre maiúsculas e minúsculas
fonte
Use encontrar. Sério, é o melhor caminho, porque então você pode realmente ver em quais arquivos ele está operando:
Observe que -H é específico do Mac, mostra o nome do arquivo nos resultados.
fonte
xargs
vez de usá--exec
la será muito mais rápida, porque-exec
gera um novo processo para cada grep e a sobrecarga se torna significativa com um grande número de arquivos. Aplicam-se avisos padrão sobre espaços nos nomes de arquivosxargs
.xargs
sintaxe.find . -iname "*.sql" -print0 | xargs -0 grep "slow"
Para pesquisar em todos os subdiretórios, mas apenas em tipos de arquivos específicos , use grep com
--include
.Por exemplo, pesquisando recursivamente no diretório atual, o texto em * .yml e * .yaml:
fonte
Se você deseja executar vários comandos, você pode usar:
fonte