web-dev-qa-db-fra.com

Trouvez tous les fichiers correspondant à 'nom' sur le système linux et recherchez avec eux 'texte'

Je dois trouver toutes les occurrences de 'filename.ext' sur un système Linux et voir celles qui contiennent le texte 'lookingfor'.

Existe-t-il un ensemble d’opérations en ligne de commande linux qui fonctionneraient?

25
siliconpi
find / -type f -name filename.ext -exec grep -l 'lookingfor' {} +

L'utilisation d'un + pour terminer la commande est plus efficace que \; car find envoie un lot complet de fichiers à grep au lieu de les envoyer un par un. Cela évite un fork/exec pour chaque fichier trouvé.

Il y a quelque temps, j'ai fait quelques essais pour comparer les performances de xargs par rapport à {} + par rapport à {} \; et j'ai découvert que {} + était plus rapide. Voici quelques-uns de mes résultats:

time find . -name "*20090430*" -exec touch {} +
real    0m31.98s
user    0m0.06s
sys     0m0.49s

time find . -name "*20090430*" | xargs touch
real    1m8.81s
user    0m0.13s
sys     0m1.07s

time find . -name "*20090430*" -exec touch {} \;
real    1m42.53s
user    0m0.17s
sys     0m2.42s
29
dogbane

Allez dans le répertoire respectif et tapez la commande suivante.

trouver . -name "* .ext" | xargs grep 'à la recherche de'

6
Amareswar

Un plus simple serait,

find / -type f -name filename.ext -print0 | xargs -0 grep  'lookingfor'

-print0 pour trouver & 0 à xargs atténuerait le problème du grand nombre de fichiers dans un seul répertoire. 

3
digen

Essayer:

find / -type f -name filename.ext -exec grep -H -n 'lookingfor' {} \;

find cherche récursivement à partir de la racine / pour les fichiers nommés filename.ext et pour chaque occurrence trouvée, grep s'exécute sur le nom du fichier en recherchant lookingfor et, le cas échéant, imprime le numéro de ligne (-n) et le nom du fichier (-H).

1
codaddict

Je trouve la commande suivante la manière la plus simple:

grep -R --include="filename.ext" lookingfor

ou ajoutez -i à la recherche insensible à la casse:

grep -i -R --include="filename.ext" lookingfor
0
R. Oosterholt