ufile: support du classement par scp

This commit is contained in:
Jephté Clain 2017-04-22 10:08:13 +04:00
parent c82c90840e
commit dec100b23b
1 changed files with 26 additions and 8 deletions

26
ufile
View File

@ -22,6 +22,11 @@ forme pattern:destdir[:renamef]
fonction retourne un code d'erreur autre que zéro, la règle est ignorée. fonction retourne un code d'erreur autre que zéro, la règle est ignorée.
Si le nouveau nom contient un chemin, destdir est ignoré et le fichier est Si le nouveau nom contient un chemin, destdir est ignoré et le fichier est
déplacé dans le répertoire spécifié. déplacé dans le répertoire spécifié.
Si dest est de la forme [user@]host:path alors le fichier est copié par scp
sur l'hôte spécifié vers la destination spécifiée, sauf si l'hôte courant est
déjà celui mentionné dans la valeur, auquel cas la copie est faite directement
dans le répertoire spécifié.
variables non documentées: interaction(=-i)
USAGE USAGE
$scriptname [options] <files...> $scriptname [options] <files...>
@ -49,6 +54,7 @@ function joinp() {
args=(% args=(%
--help '$exit_with display_help' --help '$exit_with display_help'
-c:,--config: config= -c:,--config: config=
-S:,--ssh: SSH=
-n,--fake fake=1 -n,--fake fake=1
-l,--list action=list -l,--list action=list
-e,--edit action=edit -e,--edit action=edit
@ -101,7 +107,7 @@ elif [ "$action" == edit ]; then
fi fi
"${EDITOR:-vi}" "$config" "${EDITOR:-vi}" "$config"
exit $? exit $?
else elif [ "$action" != file ]; then
die "bug: $action: action non implémentée" die "bug: $action: action non implémentée"
fi fi
@ -148,12 +154,16 @@ for file in "$@"; do
eval "[[ \"\$filename\" == $(qwc "$pattern") ]]" || continue eval "[[ \"\$filename\" == $(qwc "$pattern") ]]" || continue
userhost=
destname="$filename" destname="$filename"
interaction=-i
if [ -n "$renamef" ]; then if [ -n "$renamef" ]; then
dest= dest=
"$renamef" "$filename" "$pf" "$destdir" || continue "$renamef" "$filename" "$pf" "$destdir" || continue
if [ -n "$dest" ]; then if [ -n "$dest" ]; then
if [[ "$dest" == */* ]]; then if [[ "$dest" == *:* ]]; then
splitpair "$dest" userhost destdir
elif [[ "$dest" == */* ]]; then
setx dest=abspath "$dest" setx dest=abspath "$dest"
setx destdir=dirname -- "$dest" setx destdir=dirname -- "$dest"
setx destname=dirname -- "$dest" setx destname=dirname -- "$dest"
@ -163,17 +173,25 @@ for file in "$@"; do
fi fi
fi fi
if [ -z "$destdir" ]; then if [ -z "$userhost" -a -z "$destdir" ]; then
eerror "$rule: règle invalide: destdir est vide" eerror "$rule: règle invalide: destdir est vide"
break break
fi fi
if [ -n "$userhost" ]; then
estep "$filename --> $dest"
ask_yesno $interaction "Voulez-vous continuer?" O || { found=x; break; }
docmd scp ${SSH:+-S "$SSH"} "$file" "$dest" || die "problème lors de la copie du fichier"
else
setx dest=joinp "$destdir" "$destname" setx dest=joinp "$destdir" "$destname"
estep "$filename --> $dest" estep "$filename --> $dest"
ask_yesno -i "Voulez-vous continuer?" O || { found=x; break; } ask_yesno $interaction "Voulez-vous continuer?" O || { found=x; break; }
docmd mkdir -p "$destdir" || die "$destdir: impossible de créer le répertoire" docmd mkdir -p "$destdir" || die "$destdir: impossible de créer le répertoire"
docmd mv -i "$file" "$dest" || die "problème lors du déplacement du fichier" docmd mv -i "$file" "$dest" || die "problème lors du déplacement du fichier"
fi
found=1 found=1
break break
done done