foreach: définir des variables supplémentaires pour chaque fichier trouvé
This commit is contained in:
parent
a7fd880ea4
commit
de383beab1
34
foreach
34
foreach
|
@ -13,6 +13,13 @@ 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'
|
définie à la valeur courante de l'énumération. De plus, la variable 'index'
|
||||||
reçoit une valeur incrémentale commençant à 0.
|
reçoit une valeur incrémentale commençant à 0.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
Exemple:
|
Exemple:
|
||||||
$scriptname '*.c' 'cp \$item to/another/dir'
|
$scriptname '*.c' 'cp \$item to/another/dir'
|
||||||
Equivalent à:
|
Equivalent à:
|
||||||
|
@ -44,7 +51,7 @@ OPTIONS
|
||||||
dans le répertoire courant.
|
dans le répertoire courant.
|
||||||
Si cette option est mentionnée seule, elle implique --dir
|
Si cette option est mentionnée seule, elle implique --dir
|
||||||
-s, --string
|
-s, --string
|
||||||
Evaluer la chaine avec le shell
|
Evaluer l'expression avec la fonction 'eval' du shell.
|
||||||
-t, --title
|
-t, --title
|
||||||
--no-title
|
--no-title
|
||||||
Afficher (resp. ne pas afficher) chaque correspondance avant de lancer
|
Afficher (resp. ne pas afficher) chaque correspondance avant de lancer
|
||||||
|
@ -86,19 +93,32 @@ splitfsep2 "$varexpr" = varname expr
|
||||||
cmd=("$@")
|
cmd=("$@")
|
||||||
[ ${#cmd[*]} -gt 0 ] || cmd=('echo $item')
|
[ ${#cmd[*]} -gt 0 ] || cmd=('echo $item')
|
||||||
|
|
||||||
[ -n "$basedir" ] || basedir=.
|
if [ -n "$basedir" ]; then
|
||||||
|
case "$match" in
|
||||||
case "$match" in
|
|
||||||
all) array_lsall items "$basedir" "$expr";;
|
all) array_lsall items "$basedir" "$expr";;
|
||||||
dir) array_lsdirs items "$basedir" "$expr";;
|
dir) array_lsdirs items "$basedir" "$expr";;
|
||||||
file) array_lsfiles items "$basedir" "$expr";;
|
file) array_lsfiles items "$basedir" "$expr";;
|
||||||
string) eval "items=($expr)";;
|
string) eval "items=($expr)";;
|
||||||
esac
|
esac
|
||||||
|
else
|
||||||
|
basedir=.
|
||||||
|
case "$match" in
|
||||||
|
all) array_from_lines items "$(list_all "$basedir" "$expr")";;
|
||||||
|
dir) array_from_lines items "$(list_dirs "$basedir" "$expr")";;
|
||||||
|
file) array_from_lines items "$(list_files "$basedir" "$expr")";;
|
||||||
|
string) eval "items=($expr)";;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
[ -n "$title" ] && einfo "${#items[@]} correspondance(s) trouvée(s)"
|
[ -n "$title" ] && einfo "${#items[@]} correspondance(s) trouvée(s)"
|
||||||
let index=0
|
let index=0
|
||||||
for item in "${items[@]}"; do
|
for item in "${items[@]}"; do
|
||||||
[ -n "$title" ] && etitle "$item"
|
[ -n "$title" ] && etitle "$item"
|
||||||
|
setx file=abspath "$item"
|
||||||
|
setx dir=dirname -- "$file"
|
||||||
|
setx name=basename -- "$file"
|
||||||
|
splitname "$name" basename ext
|
||||||
|
[[ "$name" == *.* ]] && dotext=".$ext" || dotext=
|
||||||
(
|
(
|
||||||
if [ -n "$changedir" ]; then
|
if [ -n "$changedir" ]; then
|
||||||
if [ -f "$item" ]; then
|
if [ -f "$item" ]; then
|
||||||
|
@ -109,8 +129,8 @@ for item in "${items[@]}"; do
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ -n "$parentdir" ]; then
|
if [ -n "$parentdir" ]; then
|
||||||
cd "$(dirname -- "$item")"
|
cd "$dir"
|
||||||
item="$(basename -- "$item")"
|
item="$name"
|
||||||
elif [ -n "$changedir" ]; then
|
elif [ -n "$changedir" ]; then
|
||||||
cd "$item"
|
cd "$item"
|
||||||
item=.
|
item=.
|
||||||
|
|
Loading…
Reference in New Issue