support des variables
This commit is contained in:
parent
191d3c223d
commit
0e6f55abb9
57
ufile
57
ufile
|
@ -69,6 +69,10 @@ OPTIONS
|
||||||
nécessaire.
|
nécessaire.
|
||||||
Par défaut, seul le tableau RULES est utilisé pour trouver la règle à
|
Par défaut, seul le tableau RULES est utilisé pour trouver la règle à
|
||||||
appliquer. Avec cette option, seul le tableau NRULES est utilisé.
|
appliquer. Avec cette option, seul le tableau NRULES est utilisé.
|
||||||
|
-v, --var NAME=VALUE
|
||||||
|
Définir une variable qui sera utilisée par la fonction renamef. Cette
|
||||||
|
option peut être spécifiée autant de fois que nécessaire.
|
||||||
|
Les noms commençant par _ sont réservés et ne peuvent pas être définis.
|
||||||
--force-cp
|
--force-cp
|
||||||
Spécifier le mode de classement des fichiers. Par défaut, le fichier est
|
Spécifier le mode de classement des fichiers. Par défaut, le fichier est
|
||||||
déplacé dans la destination s'il s'agit d'un classement local, ou copié
|
déplacé dans la destination s'il s'agit d'un classement local, ou copié
|
||||||
|
@ -136,12 +140,25 @@ function __set_dest() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function define_vars() {
|
||||||
|
local _name _value
|
||||||
|
for _name in "$@"; do
|
||||||
|
splitvar "$_name" _name _value
|
||||||
|
if [[ "$_name" == _* ]]; then
|
||||||
|
ewarn "$_name: cette variable ne peut être définie"
|
||||||
|
else
|
||||||
|
setv "$_name" "$_value"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
args=(%
|
args=(%
|
||||||
--help '$exit_with display_help'
|
--help '$exit_with display_help'
|
||||||
-c:,--config: config=
|
-c:,--config: config=
|
||||||
-C,--other-configs other_configs=1
|
-C,--other-configs other_configs=1
|
||||||
--file action=file
|
--file action=file
|
||||||
-j:,--nrule: nrules
|
-j:,--nrule: _nrules
|
||||||
|
-v:,--var: _vars
|
||||||
--force-cp force_cp=1
|
--force-cp force_cp=1
|
||||||
-S:,--ssh: SSH=
|
-S:,--ssh: SSH=
|
||||||
--force-scp force_scp=1
|
--force-scp force_scp=1
|
||||||
|
@ -202,20 +219,20 @@ else
|
||||||
function docmd() { "$@"; }
|
function docmd() { "$@"; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ${#nrules[*]} -gt 0 ]; then
|
if [ ${#_nrules[*]} -gt 0 ]; then
|
||||||
array_fix_paths nrules ,
|
array_fix_paths _nrules ,
|
||||||
array_copy rules NRULES
|
array_copy _rules NRULES
|
||||||
nrule=1
|
_nrule=1
|
||||||
else
|
else
|
||||||
array_copy rules RULES
|
array_copy _rules RULES
|
||||||
nrule=
|
_nrule=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ $# -gt 0 ] || die "Vous devez spécifier des fichiers à classer"
|
[ $# -gt 0 ] || die "Vous devez spécifier des fichiers à classer"
|
||||||
[ ${#rules[*]} -gt 0 ] || die "Il faut définir des règles ${nrule:+N}RULES dans ~/etc/default/ufile ou ~/etc/ufile.d/*.conf"
|
[ ${#_rules[*]} -gt 0 ] || die "Il faut définir des règles ${_nrule:+N}RULES dans ~/etc/default/ufile ou ~/etc/ufile.d/*.conf"
|
||||||
|
|
||||||
# vérifier les règles
|
# vérifier les règles
|
||||||
for rule in "${rules[@]}"; do
|
for rule in "${_rules[@]}"; do
|
||||||
splitpair "$rule" pattern r2
|
splitpair "$rule" pattern r2
|
||||||
splitpair "$r2" destdir r3
|
splitpair "$r2" destdir r3
|
||||||
splitpair "$r3" renamef r4
|
splitpair "$r3" renamef r4
|
||||||
|
@ -227,15 +244,15 @@ for rule in "${rules[@]}"; do
|
||||||
done
|
done
|
||||||
|
|
||||||
# faire la liste des fichiers
|
# faire la liste des fichiers
|
||||||
files=()
|
_files=()
|
||||||
for file in "$@"; do
|
for file in "$@"; do
|
||||||
if [ -d "$file" -a -n "$recursive" ]; then
|
if [ -d "$file" -a -n "$recursive" ]; then
|
||||||
setx file=abspath "$file"
|
setx file=abspath "$file"
|
||||||
array_from_lines rfiles "$(find "$file" -type f)"
|
array_from_lines rfiles "$(find "$file" -type f)"
|
||||||
array_extendu files rfiles
|
array_extendu _files rfiles
|
||||||
elif [ -f "$file" ]; then
|
elif [ -f "$file" ]; then
|
||||||
setx file=abspath "$file"
|
setx file=abspath "$file"
|
||||||
array_addu files "$file"
|
array_addu _files "$file"
|
||||||
elif [ -n "$fake" ]; then
|
elif [ -n "$fake" ]; then
|
||||||
: # on est en mode fake, pas grave si le fichier n'est pas trouvé
|
: # on est en mode fake, pas grave si le fichier n'est pas trouvé
|
||||||
elif [ -d "$file" ]; then
|
elif [ -d "$file" ]; then
|
||||||
|
@ -247,12 +264,12 @@ done
|
||||||
|
|
||||||
# faire le classement effectif
|
# faire le classement effectif
|
||||||
r=
|
r=
|
||||||
for file in "${files[@]}"; do
|
for file in "${_files[@]}"; do
|
||||||
setx pf=abspath "$file"
|
setx pf=abspath "$file"
|
||||||
setx dir=dirname -- "$pf"
|
setx dir=dirname -- "$pf"
|
||||||
setx filename=basename -- "$pf"
|
setx filename=basename -- "$pf"
|
||||||
found=
|
found=
|
||||||
for rule in "${rules[@]}"; do
|
for rule in "${_rules[@]}"; do
|
||||||
splitpair "$rule" pattern r2
|
splitpair "$rule" pattern r2
|
||||||
splitpair "$r2" odestdir r3
|
splitpair "$r2" odestdir r3
|
||||||
splitpair "$r3" renamef r4
|
splitpair "$r3" renamef r4
|
||||||
|
@ -262,8 +279,8 @@ for file in "${files[@]}"; do
|
||||||
odestdir="$HOME"
|
odestdir="$HOME"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$nrule" ]; then
|
if [ -n "$_nrule" ]; then
|
||||||
array_contains nrules "$pattern" || continue
|
array_contains _nrules "$pattern" || continue
|
||||||
else
|
else
|
||||||
if [ "${pattern#/}" != "$pattern" ]; then
|
if [ "${pattern#/}" != "$pattern" ]; then
|
||||||
awk -v filename="$filename" -v pattern="${pattern#/}" 'BEGIN { exit(filename ~ pattern? 0: 1) }' || continue
|
awk -v filename="$filename" -v pattern="${pattern#/}" 'BEGIN { exit(filename ~ pattern? 0: 1) }' || continue
|
||||||
|
@ -275,7 +292,13 @@ for file in "${files[@]}"; do
|
||||||
unset dest
|
unset dest
|
||||||
interaction=--DEFAULT--
|
interaction=--DEFAULT--
|
||||||
if [ -n "$renamef" ]; then
|
if [ -n "$renamef" ]; then
|
||||||
"$renamef" "$filename" "$pf" "$odestdir" || continue
|
# protéger les variables nécessaires au lancement de renamef
|
||||||
|
_renamef="$renamef"
|
||||||
|
_filename="$filename"
|
||||||
|
_pf="$pf"
|
||||||
|
_odestdir="$odestdir"
|
||||||
|
define_vars "${_vars[@]}"
|
||||||
|
"$_renamef" "$_filename" "$_pf" "$_odestdir" || continue
|
||||||
fi
|
fi
|
||||||
if is_array dest; then
|
if is_array dest; then
|
||||||
array_copy tmpdests dest
|
array_copy tmpdests dest
|
||||||
|
|
Loading…
Reference in New Issue