Quelle concision puis-je utiliser pour rechercher tous les fichiers qui ne contiennent PAS de chaîne de texte ?
J'ai essayé ceci (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 contient 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 *
va le faire, mais comment puis-je utiliser la commande find en combinaison avec grep pour les fichiers exclus, c'est ce que je veux vraiment savoir.
pss :De plus, je ne sais pas comment faire en sorte que grep inclue des sous-répertoires avec le grep -L *
syntaxe, mais je veux toujours savoir comment l'utiliser avec find
🙂
Réponse acceptée :
find . -type f | xargs grep -H -c 'shared.php' | grep 0$ | cut -d':' -f1
OU
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, nous avons donc coupé la première colonne, c'est-à-dire le nom de fichier de la sortie.