Boucle sur un ensemble de fichiers du shell

Les scripts shell sont puissants car tout ce qui peut être fait depuis le shell peut être fait dans un script shell. De même, les fonctionnalités que l’on ne voit habituellement que dans les scripts de shell, comme les boucles et les conditions, constituent un jeu équitable, tapé directement dans le shell. Boucler sur un ensemble de fichiers en utilisant une boucle for est un exemple simple.


S'il existe plusieurs archives gzip dans un répertoire et que vous souhaitez les extraire dans des répertoires distincts, la boucle depuis le shell est une solution. Par exemple, file1.tar.gzip et file2.tgz existent et doivent être extraits dans les répertoires file1.tar.gzip.dir et file2.tgz.dir, respectivement. Si vous utilisez un shell de type Bourne (sh, ksh, zsh, bash), utilisez les commandes suivantes à partir de la ligne de commande. (Après avoir appuyé sur la touche entrée à la fin de chaque ligne, le shell changera l'invite en> pour vous avertir qu'il en attend encore plus.):

pour le fichier en * gz
> faire
> mkdir $ file.dir
> ((cd $ file.dir; gzip -dc $ fichier | tar xf -)
> fait

Si les commandes cd et gzip / tar sont entre parenthèses, le changement de répertoire ne concerne que les commandes gzip / tar, et non les suivantes.

Un autre exemple montre comment créer un fichier composé du contenu d'un certain nombre de fichiers (tels que des fichiers journaux) triés par date de dernière modification. Pour créer un fichier biglog composé de tous les fichiers du répertoire actuel triés par date, utilisez les éléments suivants:

pour x dans 'ls -tr * .log'
> faire
> chat $ x >> biglog
> fait

La commande ls -tr * .log répertorie tous les fichiers se terminant par .log par ordre chronologique. Cette commande est encadrée par des "guillemets spéciaux" et non par les "guillemets simples habituels" qui entraînent l'exécution de la commande et sa sortie renvoyée au shell pour être utilisée comme une variable. Le fichier biglog doit être vide ou supprimé avant l'exécution de ces commandes.