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-lflag 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 stringbarem cada um dos arquivos que continhamfoo. -
[ $? -ne 0 ] && echo $file;: Se o valor de retorno ($?) do comandogrepfor 0 (ou seja, se a string não estiver no arquivo), imprima o nome do arquivo.