J'essaie d'utiliser find en combinaison avec grep pour trouver tous les fichiers php sur mon serveur Web qui ont un mot (n'importe quelle séquence de caractères sauf un espace) avec plus de 50 caractères.
J'ai cette base:
find . -name '*.php' -exec fgrep -q '.{50}' {} \; -print
Mais ne fonctionne pas comme prévu.
Merci
Personnellement, j'utilise egrep
uniquement:
egrep -nor '[^ ]{50,}' .
Voir man egrep
pour comprendre ce qui se passe dans la commande précédente.
Cela ne fonctionne pas comme prévu car -q
Signifie quiet
, il empêche grep
de ne rien imprimer, il n'est utile que lors du test de l'état existant de grep
. Ce que vous voulez est plus proche de:
find . -name '*.php' -exec grep -lP '\w{50,}' {} \;
-l
Signifie "imprimer le nom du fichier correspondant" et -P
Active les expressions régulières compatibles Perl afin que nous puissions utiliser le \w
Qui est un raccourci pour faire correspondre les caractères Word (essentiellement [a-zA-Z0-9-_]
Mais les détails dépendent de votre région. L'utilisation de [^ ]
Est une bonne idée mais comptera \t
Et \r
Et même \n
, Comme ainsi que des choses plus étranges comme ~@#$%^&*()
en tant que mots et je suppose que ce n'est pas ce que vous voulez.
Si vous souhaitez faire correspondre tout caractère non-espace, utilisez-le à la place:
find . -name '*.php' -exec grep -lP '\S{50,}' {} \;