Quelle commande concise puis-je utiliser pour rechercher tous les fichiers qui ne contiennent PAS de chaîne de texte?
J'ai essayé cela (en utilisant -v pour inverser les paramètres de grep) sans succès:
find . -exec grep -v -l shared.php {} \;
Quelqu'un a dit que cela fonctionnerait:
find . ! -exec grep -l shared.php {} \;
Mais cela ne semble pas fonctionner pour moi.
Cette page a cet exemple:
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
Mais c'est lourd et pas du tout concis.
ps: je sais que grep -L *
fera cela, mais comment puis-je utiliser la commande find en combinaison avec grep pour les fichiers exclus est ce que je veux vraiment savoir.
pss: Je ne sais pas non plus comment inclure grep dans les sous-répertoires avec le grep -L *
syntaxe, mais je veux quand même savoir comment l'utiliser avec find
:)
find . -type f | xargs grep -H -c 'shared.php' | grep 0$ | cut -d':' -f1
OR
find . -type f -exec grep -H -c 'shared.php' {} \; | grep 0$ | cut -d':' -f1
Ici, nous calculons le nombre de lignes correspondantes (en utilisant -c
) dans un fichier si le nombre est 0 alors c'est le fichier requis, donc nous coupons la première colonne, c'est-à-dire le nom de fichier de la sortie.
Votre recherche devrait fonctionner si vous modifiez -v -l
(fichiers dont la ligne ne correspond pas) à -L
(fichiers sans lignes correspondantes), mais vous pouvez également utiliser le récursif de grep
(-r
) option:
grep -rL shared.php .
Je le sais
grep -L *
fera cela, mais comment puis-je utiliser la commandefind
en combinaison avecgrep
pour exclure des fichiers est ce que je veux vraiment savoir
Vous pouvez utiliser find
et grep
comme ceci:
find . -type f ! -exec grep -q 'PATTERN' {} \; -print
Ici -print
n'est exécuté que si l'expression précédente: ! -exec ... {}
est évalué comme true
.
Donc pour chaque fichier trouvé, grep -q 'PATTERN'
est exec
uted, si le résultat est false
alors l'expression entière ! -exec grep -q 'PATTERN'
est évalué comme true
et le nom du fichier est print
ed.
Vous ne trouvez pas de résultat correspondant à l'option -L
grep -iL shared.php .