support des variables
This commit is contained in:
parent
191d3c223d
commit
0e6f55abb9
57
ufile
57
ufile
|
@ -69,6 +69,10 @@ OPTIONS
|
|||
nécessaire.
|
||||
Par défaut, seul le tableau RULES est utilisé pour trouver la règle à
|
||||
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
|
||||
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é
|
||||
|
@ -136,12 +140,25 @@ function __set_dest() {
|
|||
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=(%
|
||||
--help '$exit_with display_help'
|
||||
-c:,--config: config=
|
||||
-C,--other-configs other_configs=1
|
||||
--file action=file
|
||||
-j:,--nrule: nrules
|
||||
-j:,--nrule: _nrules
|
||||
-v:,--var: _vars
|
||||
--force-cp force_cp=1
|
||||
-S:,--ssh: SSH=
|
||||
--force-scp force_scp=1
|
||||
|
@ -202,20 +219,20 @@ else
|
|||
function docmd() { "$@"; }
|
||||
fi
|
||||
|
||||
if [ ${#nrules[*]} -gt 0 ]; then
|
||||
array_fix_paths nrules ,
|
||||
array_copy rules NRULES
|
||||
nrule=1
|
||||
if [ ${#_nrules[*]} -gt 0 ]; then
|
||||
array_fix_paths _nrules ,
|
||||
array_copy _rules NRULES
|
||||
_nrule=1
|
||||
else
|
||||
array_copy rules RULES
|
||||
nrule=
|
||||
array_copy _rules RULES
|
||||
_nrule=
|
||||
fi
|
||||
|
||||
[ $# -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
|
||||
for rule in "${rules[@]}"; do
|
||||
for rule in "${_rules[@]}"; do
|
||||
splitpair "$rule" pattern r2
|
||||
splitpair "$r2" destdir r3
|
||||
splitpair "$r3" renamef r4
|
||||
|
@ -227,15 +244,15 @@ for rule in "${rules[@]}"; do
|
|||
done
|
||||
|
||||
# faire la liste des fichiers
|
||||
files=()
|
||||
_files=()
|
||||
for file in "$@"; do
|
||||
if [ -d "$file" -a -n "$recursive" ]; then
|
||||
setx file=abspath "$file"
|
||||
array_from_lines rfiles "$(find "$file" -type f)"
|
||||
array_extendu files rfiles
|
||||
array_extendu _files rfiles
|
||||
elif [ -f "$file" ]; then
|
||||
setx file=abspath "$file"
|
||||
array_addu files "$file"
|
||||
array_addu _files "$file"
|
||||
elif [ -n "$fake" ]; then
|
||||
: # on est en mode fake, pas grave si le fichier n'est pas trouvé
|
||||
elif [ -d "$file" ]; then
|
||||
|
@ -247,12 +264,12 @@ done
|
|||
|
||||
# faire le classement effectif
|
||||
r=
|
||||
for file in "${files[@]}"; do
|
||||
for file in "${_files[@]}"; do
|
||||
setx pf=abspath "$file"
|
||||
setx dir=dirname -- "$pf"
|
||||
setx filename=basename -- "$pf"
|
||||
found=
|
||||
for rule in "${rules[@]}"; do
|
||||
for rule in "${_rules[@]}"; do
|
||||
splitpair "$rule" pattern r2
|
||||
splitpair "$r2" odestdir r3
|
||||
splitpair "$r3" renamef r4
|
||||
|
@ -262,8 +279,8 @@ for file in "${files[@]}"; do
|
|||
odestdir="$HOME"
|
||||
fi
|
||||
|
||||
if [ -n "$nrule" ]; then
|
||||
array_contains nrules "$pattern" || continue
|
||||
if [ -n "$_nrule" ]; then
|
||||
array_contains _nrules "$pattern" || continue
|
||||
else
|
||||
if [ "${pattern#/}" != "$pattern" ]; then
|
||||
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
|
||||
interaction=--DEFAULT--
|
||||
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
|
||||
if is_array dest; then
|
||||
array_copy tmpdests dest
|
||||
|
|
Loading…
Reference in New Issue