Que comando conciso posso usar para encontrar todos os arquivos que NÃO contêm uma sequência de texto?
Eu tentei isso (usando -v para inverter os parâmetros do grep) sem sorte:
find . -exec grep -v -l shared.php {} \;
Alguém disse que isso funcionaria:
find . ! -exec grep -l shared.php {} \;
Mas isso não parece funcionar para mim.
Esta página tem este exemplo:
find ./logs -size +1c > t._tmp
while read filename
do
grep -q "Process Complete" $filename
if [ $? -ne 0 ] ; then
echo $filename
fi
done < t._tmp
rm -f t_tmp
Mas isso é complicado e nada conciso.
ps: Eu sei que grep -L *
isso é possível, mas como posso usar o comando find em combinação com grep para arquivos excluídos é o que realmente quero saber.
pss: Também não tenho certeza de como o grep deve incluir subdiretórios com a grep -L *
sintaxe, mas ainda quero saber como usá-lo com find
:)
Respostas:
OU
Aqui estamos calculando o número de linhas correspondentes (usando
-c
) em um arquivo se a contagem for 0, então é o arquivo necessário, então cortamos a primeira coluna, ou seja, o nome do arquivo da saída.fonte
grep
foi fixado este ainda assumiria nenhum nome de arquivo contendo:
ou nova linha caracteres ...Sua descoberta deve funcionar se você alterar
-v -l
(arquivos com qualquer linha que não corresponda) para-L
(arquivos sem linhas correspondentes), mas você também poderá usargrep
a-r
opção recursive ( ):fonte
find . -exec grep -v -l shared.php {} \;
(e todas as outras variantes que eu tentei) não está funcionando para mim. Estou no OS X, mas não acho que isso importe. Eu te dei um +1 porque tinha esquecido a-r
opção.-L
Você pode usar
find
egrep
assim:Aqui
-print
é executado apenas se a expressão anterior: for! -exec ... {}
avaliada comotrue
.Portanto, para cada arquivo encontrado,
grep -q 'PATTERN'
éexec
usado, se o resultado forfalse
, a expressão inteira será! -exec grep -q 'PATTERN'
avaliada comotrue
e o nome do arquivo seráprint
editado.fonte
grep -L
pois também incluirá os arquivos não legíveis na lista.Você não encontra resultado correspondente pela opção -L
fonte
Eu acho que você está procurando um comando como
A opção
-q
égrep
encerrada e, após o uso,-execdir
você precisa-print
imprimir os arquivos encontrados.fonte