Ajouter le script foreach
This commit is contained in:
parent
f5db579658
commit
9fe17b3593
|
@ -0,0 +1,74 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: lancer une commande pour un ensemble d'arguments
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname [options] [VAR=]expr cmd...
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
$scriptname '*.c' 'cp $item to/another/dir'
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-b, --basedir BASEDIR
|
||||||
|
Chercher les expressions -d, -g, -f, -a à partir de BASEDIR au lieu du
|
||||||
|
répertoire courant.
|
||||||
|
-d, --dir
|
||||||
|
Faire la correspondance de l'expression sur les répertoires
|
||||||
|
-g, --go
|
||||||
|
Comme -d, mais pour chaque répertoire, lancer la commande après en avoir
|
||||||
|
fait le répertoire courant.
|
||||||
|
-f, --file
|
||||||
|
Faire la correspondance de l'expression sur les répertoires
|
||||||
|
-a, --all
|
||||||
|
Faire la correspondance de l'expression sur les répertoires
|
||||||
|
-s, --string
|
||||||
|
Evaluer la chaine avec le shell"
|
||||||
|
}
|
||||||
|
|
||||||
|
basedir=
|
||||||
|
match=all
|
||||||
|
changedir=
|
||||||
|
args=(+
|
||||||
|
--help '$exit_with display_help'
|
||||||
|
-b:,--basedir: basedir=
|
||||||
|
-d,--dir match=dir
|
||||||
|
-g,--go '$match=dir; changedir=1'
|
||||||
|
-f,-file match=file
|
||||||
|
-a,--all match=all
|
||||||
|
-s,--string match=string
|
||||||
|
)
|
||||||
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
|
varexpr="$1"; shift
|
||||||
|
splitfsep2 "$varexpr" = varname expr
|
||||||
|
[ -n "$varname" ] || varname=item
|
||||||
|
[ -n "$expr" ] || expr="*"
|
||||||
|
|
||||||
|
cmd=("$@")
|
||||||
|
[ ${#cmd[*]} -gt 0 ] || cmd=('echo $item')
|
||||||
|
|
||||||
|
[ -n "$basedir" ] || basedir=.
|
||||||
|
|
||||||
|
case "$match" in
|
||||||
|
all) array_lsall items "$basedir" "$expr";;
|
||||||
|
dir) array_lsdirs items "$basedir" "$expr";;
|
||||||
|
file) array_lsfiles items "$basedir" "$expr";;
|
||||||
|
string) eval "items=($expr)";;
|
||||||
|
esac
|
||||||
|
|
||||||
|
let index=0
|
||||||
|
for item in "${items[@]}"; do
|
||||||
|
(
|
||||||
|
[ -n "$changedir" ] && cd "$item"
|
||||||
|
eval "export $(echo_setv "$varname" "$item"); ${cmd[*]}"
|
||||||
|
)
|
||||||
|
let index=$index+1
|
||||||
|
done
|
Loading…
Reference in New Issue