Aqui está uma que é vagamente baseada na resposta de Rich Homolka, mas funciona em árvores de diretórios:
find . -type f -exec grep -l addDesignControlChangeNotification {} \; |
while IFS= read -r file; do
grep -q removeDesignControlChangeNotification "$file" > /dev/null ;
[ $? -ne 0 ] && echo $file;
done
Todos os arquivos retornados conterão addDesignControlChangeNotification
, mas não removeDesignControlChangeNotification
.
EXPLICAÇÃO:
-
find . -type f -exec grep -l foo {} \;
: Isso imprimirá todos os arquivos em qualquer subdiretório do diretório atual que contenha a stringfoo
. O-l
flag faz com que o grep imprima apenas os nomes dos arquivos correspondentes. -
while read file
: itera em cada arquivo encontrado acima, salvando seu nome na variável$file
. -
grep -q bar "$file" > /dev/null
: este comando procura a stringbar
em cada um dos arquivos que continhamfoo
. -
[ $? -ne 0 ] && echo $file;
: Se o valor de retorno ($?
) do comandogrep
for 0 (ou seja, se a string não estiver no arquivo), imprima o nome do arquivo.