#!/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 -t, --title --no-title Afficher (resp. ne pas afficher) chaque correspondance avant de lancer la commande. Par défaut, l'affichage est effectué." } basedir= match=all changedir= title=1 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 -t,--title title=1 --no-title title= ) 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 [ -n "$title" ] && einfo "${#items[@]} correspondance(s) trouvée(s)" let index=0 for item in "${items[@]}"; do [ -n "$title" ] && etitle "$item" ( [ -n "$changedir" ] && cd "$item" eval "export $(echo_setv "$varname" "$item"); ${cmd[*]}" ) [ -n "$title" ] && eend "$item" let index=$index+1 done