Travailler avec xenserver, et je veux exécuter une commande sur chaque fichier se trouvant dans un répertoire, récupérant des éléments de la sortie de la commande et les ajoutant à un fichier.
Je suis clair sur la commande que je veux utiliser et sur la façon de supprimer les chaînes selon les besoins.
Mais ce que je ne comprends pas bien, c'est comment puis-je lui demander d'exécuter cette commande sur chaque fichier, en passant au suivant, jusqu'à ce qu'aucun fichier ne soit trouvé.
grep $PATTERN *
serait suffisant. Par défaut, grep ignorerait tous les sous-répertoires. Cependant, si vous voulez passer par eux, grep -r $PATTERN *
est le cas.
Sous Linux, j'utilise normalement cette commande pour grep récursivement pour un texte particulier dans un répertoire
grep -rni "string" *
où,
r = récursif i.e, recherche dans les sous-répertoires du répertoire courant
n = pour imprimer les numéros de ligne sur la sortie standard
i = recherche insensible à la casse
Utilisez find. Sérieusement, c'est la meilleure façon de procéder, car vous pouvez alors vraiment voir sur quels fichiers il opère:
find . -name "*.sql" -exec grep -H "slow" {} \;
Notez que le -H est spécifique à mac, il montre le nom du fichier dans les résultats.
Si vous voulez faire plusieurs commandes, vous pouvez utiliser:
for I in `ls *.sql`
do
grep "foo" $I >> foo.log
grep "bar" $I >> bar.log
done