Je suis un peu nouveau sur la recherche via bash, alors n'hésitez pas à me donner suggestions sur les méthodes à utiliser au lieu de cela, que je n'utiliserai plus jamais.
Je cherche occurrences d'une chaîne, de manière récursive dans un répertoire , avec environ 50 fichiers php pas très volumineux; certains dans le répertoire en cours, certains dans les répertoires situés sous le répertoire en cours, trois niveaux de répertoires au plus.
La méthode que j'utilise est
find . | xargs grep "module" > module.txt
Dans les répertoires simples (à un niveau), cela fonctionne bien, mais dans ce cas, le fichier a pris 4 Go jusqu'à ce qu'il soit rempli. tout l'espace sur la partition . Ce n'était même pas encore fait.
Pourquoi ce fichier devient-il si volumineux?
Réponses:
module.txt
est créé avant le début du pipeline, il est donc inclus dans la recherche.grep
trouve une instance de "module" dedans, une ligne contenant le mot "module" y est ajoutée. Ce que grep trouve ensuite et ajoute. Ce que grep trouve ensuite et ajoute. Ce que grep trouve ensuite et ajoute. Lequel...la source
Et quelle est la sortie sans
> module.txt
.Pourquoi ne pas essayer d'utiliser
grep -R "module" . > ../module.txt
?la source
Ou si votre grep a une fonction récursive,
Ou avec shell bash 4.0
la source
find -name '*.php' -exec grep -q -H "module" {} \; -print > ../module.txt
.find /path -type f -iname "*.php" -exec grep -q -H "module" "{}" +; ...