Question Recherche récursive de fichiers contenant du texte spécifique


Comment générer récursivement un fichier texte contenant une liste de tous les fichiers de mon serveur contenant une chaîne spécifique dans les fichiers?

Je sais que la commande suivante peut être utilisée pour remplacer une chaîne de manière récursive

find /var/www -type f -print0 | xargs -0 sed -i 's/old string/new string/g'

Je ne veux pas remplacer la chaîne, je veux juste une liste de tous les fichiers qui contiennent la chaîne.


4
2018-01-18 14:31


origine


Pour un utilisateur de Windows, j'aurais suggéré d'écrire un fichier de commandes qui enregistre la sortie dans un fichier et le place dans le planificateur. Essayez ce qui est le substitut linux pour ce processus - Shekhar


Réponses:


Utilisation grep au lieu de sed:

find /var/www -type f -print0 | xargs -0 grep -i 'old string'

De la façon dont vous énoncez la question, il semble que vous ne soyez pas encore trop familier avec grep. En savoir plus sur ses options dans son type de page de manuel: man grep sur votre ligne de commande.

mettre à jour pour répondre au commentaire - essayez d'ajouter le -l option pour afficher uniquement les noms de fichiers. le -i rend la recherche insensible à la casse. Les deux faciles à utiliser sont avec un seul tiret: grep -il


7
2018-01-18 14:38



Cela ne semble pas me donner uniquement les chemins / fichiers contenant la chaîne que je recherche. Pour une raison quelconque, j'obtiens également le texte des fichiers recherchés. - oshirowanen
Ajout d'un peu de -l - Doug Harris


Vous pouvez également utiliser grep seul sans trouver:

grep -Rli 'old string' /var/www > list_of_files

4
2018-01-18 15:14





Vous pouvez essayer d'ajouter l'indicateur -l à la commande pour répertorier uniquement les noms de fichiers

find /var/www -type f -print0 | xargs -0 grep -li 'old string'

1
2018-01-18 14:55





Essayez ack - il est plus rapide que grep et supporte les regex perl.

ack -la <pattern> /var/www

Sur certains systèmes, ce paquet s'appelle "ack" et s'appelle parfois "ack-grep".


0
2018-03-04 05:10