next up previous contents
suivant: Aspects de sécurité informatique monter: Création de scripts précédent: Exemple de boucle en   Table des matières

Autres exemples

Cette section illustre quelques exemples de commandes avancées sous sh.

Supposez que vous vouliez éditer tous les fichiers qui contiennent une certaine chaîne. Il ne s'agit pas d'éditer des fichiers dont le nom serait composé d'une certaine chaîne (ce problème se résoudrait facilement avec une expression régulière (voir section regexp)). On utilisera pour ce faire l'exécution de commande avec prise de la sortie comme arguments d'une commande (on utilise les backquotes, ou accent grave). Notez l'option -l de grep qui demande de ne lister que les noms des fichiers.

          vi `grep -l regexp *`

Des commande n'utilisant pas d'entrée standard peuvent être utilisées avec la commande xargs. Supposons que vous désiriez effacer tous les fichiers contenant une certaine chaîne. Les deux possibilités suivantes sont équivalentes. Une dernière méthode (en spécifiant l'option -l à xargs) aurait l'avantage de ne pas souffrir de limitation de nombres d'arguments (au prix d'une exécution plus lente, en effet la présence de l'option -l force une exécution de rm par argument).

          rm `grep -l regexp *`

         grep -l regexp * | xargs rm

Mais que se passe-t-il si les noms de fichiers contiennent des espaces ou d'autres séparateurs (tabulateurs, fins de lignes, etc) ? La solution est, du moins avec les outils GNU, d'utiliser un argument spécial (souvent -0), qui permet d'indiquer aux commandes qui le supportent de travailler en mode chaîne terminée par zéro (le NUL du langage C). Comme les noms de fichiers ne peuvent contenir ce caractère, l'interprétation n'est plus ambiguë:

         grep -lZ regexp * | xargs -0 rm


next up previous contents
suivant: Aspects de sécurité informatique monter: Création de scripts précédent: Exemple de boucle en   Table des matières
Marc SCHAEFER 2003-03-01