2016-11-28 09:16:41 +04:00
|
|
|
# foreach
|
|
|
|
|
|
|
|
~~~
|
|
|
|
foreach: lancer une commande pour un ensemble d'arguments
|
|
|
|
|
|
|
|
USAGE
|
|
|
|
foreach [options] [VAR=]expr cmd...
|
2016-12-04 17:53:53 +04:00
|
|
|
foreach [options] [VAR=]items... -- cmd...
|
2016-11-28 09:16:41 +04:00
|
|
|
|
|
|
|
La commande est lancée avec la variable 'VAR', qui vaut par défaut 'item',
|
|
|
|
définie à la valeur courante de l'énumération. De plus, la variable 'index'
|
|
|
|
reçoit une valeur incrémentale commençant à 0.
|
|
|
|
|
2016-12-04 17:53:53 +04:00
|
|
|
La deuxième syntaxe appelée syntaxe alternative permet de spécifier un ensemble
|
|
|
|
d'éléments directement, mais nécessite l'utilisation du séparateur '--' pour
|
|
|
|
identifier où s'arrête la liste des éléments.
|
|
|
|
|
2016-11-28 09:16:41 +04:00
|
|
|
En plus de VAR, les variables file, dir, name, basename, ext et dotext sont
|
|
|
|
définies. Elle valent respectivement le chemin absolu du fichier, le répertoire
|
|
|
|
absolu du fichier, le nom du fichier, le nom de base sans extension, l'extension
|
|
|
|
sans le point et l'extension avec le point, e.g pour item=dir/file.ext on a
|
|
|
|
file=/path/to/dir/file.ext, dir=/path/to/dir, name=file.ext, basename=file,
|
|
|
|
ext=ext, dotext=.ext
|
|
|
|
|
2016-12-04 17:53:53 +04:00
|
|
|
Les 3 exemples suivants sont équivalents:
|
2016-11-28 09:16:41 +04:00
|
|
|
foreach '*.c' cp %item dest/dir
|
|
|
|
foreach item='*.c' cp %item dest/dir
|
2016-12-04 17:53:53 +04:00
|
|
|
foreach *.c -- cp %item dest/dir
|
2016-11-28 09:16:41 +04:00
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
-b, --basedir BASEDIR
|
|
|
|
Chercher les expressions -d, -f, -a à partir de BASEDIR au lieu du
|
|
|
|
répertoire courant.
|
|
|
|
-d, --dir
|
|
|
|
-f, --file
|
|
|
|
-a, --all
|
2016-12-04 17:53:53 +04:00
|
|
|
-s, --string
|
|
|
|
Ces options permettent de spécifier le type d'expression et la façon de
|
|
|
|
les traiter. Avec -d, faire la correspondance de l'expression sur les
|
|
|
|
répertoires uniquement. Avec -f, faire la correspondance sur les fichier
|
|
|
|
uniquement. Avec -a, faire la correspondance sur les répertoires et les
|
|
|
|
fichiers. Avec -s, évaluer l'expression avec la fonction 'eval' du
|
|
|
|
shell.
|
|
|
|
Si la syntaxe alternative est utilisée, le premier élément est évalué
|
|
|
|
conformément à ces options *si et seulement s'il* est précédé d'une
|
|
|
|
chaine 'VAR='. Les autres éléments sont pris tels-quels. e.g:
|
|
|
|
cette commande affiche uniquement la chaine '*.c':
|
|
|
|
foreach '*.c' --
|
|
|
|
alors que celle-ci liste les fichiers qui ont l'extension '.c':
|
|
|
|
foreach 'item=*.c' --
|
2016-11-28 09:16:41 +04:00
|
|
|
-p, --parent
|
|
|
|
Pour chaque fichier/répertoire, se placer dans le répertoire parent
|
|
|
|
avant de lancer la commande. item est aussi modifié pour ne plus
|
|
|
|
contenir que le nom de la cible (qui est désormais dans le répertoire
|
|
|
|
courant)
|
|
|
|
Cette option a la priorité sur --go
|
|
|
|
-g, --go
|
|
|
|
Si la cible est un répertoire, en faire le répertoire courant avant de
|
|
|
|
lancer la commande. Si la cible est un fichier, faire comme --parent et
|
|
|
|
se placer dans le répertoire du fichier avant de lancer la commande.
|
|
|
|
Dans les deux cas, item est modifié pour ne plus contenir que le nom de
|
|
|
|
la cible, soit '.' pour le répertoire courant, soit le nom du fichier
|
|
|
|
dans le répertoire courant.
|
|
|
|
Si cette option est mentionnée seule, elle implique --dir
|
|
|
|
-x, --expand
|
|
|
|
-n, --no-expand
|
|
|
|
Reconnaitre et traiter (resp. ne pas reconnaitre) la syntaxe %var dans
|
|
|
|
les arguments. C'est le cas par défaut, ce qui permet de simplifier
|
|
|
|
l'écriture d'une ligne de commande. Pour écrire le caractère '%', il
|
2016-12-04 17:53:53 +04:00
|
|
|
suffit de le doubler e.g %%item
|
2016-11-28 09:16:41 +04:00
|
|
|
Si l'expansion est désactivée, il faut protéger le caractère $ pour
|
|
|
|
qu'il soit traité, e.g, avec les examples ci-dessus:
|
|
|
|
foreach -n '*.c' 'cp "$item" dest/dir'
|
|
|
|
-t, --title
|
|
|
|
--no-title
|
|
|
|
Afficher (resp. ne pas afficher) chaque correspondance avant de lancer
|
|
|
|
la commande. Par défaut, l'affichage est effectué.
|
|
|
|
~~~
|
|
|
|
|
|
|
|
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|