script umove qui est un frontend pour les fonction move_*
This commit is contained in:
parent
613f31ef5b
commit
429f246946
74
umove
Executable file
74
umove
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
#!/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: déplacer un fichier ou un lien
|
||||||
|
|
||||||
|
Quand on déplace un lien, la destination du lien est mise à jour
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname files... dest
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-d UPDATEDIR
|
||||||
|
Chercher dans UPDATEDIR tous les liens qui pointent vers le fichier
|
||||||
|
déplacé, et mettre à jour ces liens après avoir déplacé le fichier"
|
||||||
|
}
|
||||||
|
|
||||||
|
args=(--help '$exit_with display_help' -d:,--updatedir: .)
|
||||||
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
die "Vous devez spécifier les fichiers à déplacer"
|
||||||
|
elif [ $# -eq 1 ]; then
|
||||||
|
die "Vous devez spécifier la destination"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -z "$updatedir" -o -d "$updatedir" ] || die "$updatedir: doit être un répertoire"
|
||||||
|
|
||||||
|
srcs=("$@")
|
||||||
|
setx dest=last_value srcs
|
||||||
|
array_del_last srcs
|
||||||
|
|
||||||
|
if [ $# -eq 2 ]; then
|
||||||
|
# S'il n'y a que deux arguments, permettre que le deuxième argument ne soit
|
||||||
|
# pas un répertoire
|
||||||
|
if [ -d "$dest" ]; then
|
||||||
|
: # ce cas sera traité ci-dessous
|
||||||
|
elif [ -e "$dest" ]; then
|
||||||
|
die "$dest: refus d'écraser la destination"
|
||||||
|
else
|
||||||
|
src="${srcs[0]}"
|
||||||
|
if [ -n "$updatedir" ]; then
|
||||||
|
if [ -L "$src" ]; then
|
||||||
|
link="$src"
|
||||||
|
linkdir="$(dirname -- "$link")"
|
||||||
|
ldest="$(abspath "$(readlink "$link")" "$linkdir")"
|
||||||
|
array_find_links update_links "$ldest" "$updatedir"
|
||||||
|
else
|
||||||
|
array_find_links update_links "$src" "$updatedir"
|
||||||
|
fi
|
||||||
|
move_file "$src" "$dest" "${update_links[@]}"
|
||||||
|
else
|
||||||
|
move_link "$src" "$dest"
|
||||||
|
fi
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# S'il y a plus de deux arguments, il FAUT que dest soit un répertoire
|
||||||
|
[ -d "$dest" ] || die "$dest: doit être un répertoire"
|
||||||
|
for src in "${srcs[@]}"; do
|
||||||
|
if [ -n "$updatedir" ]; then
|
||||||
|
if [ -L "$src" ]; then
|
||||||
|
move_link "$src" "$dest"
|
||||||
|
else
|
||||||
|
array_find_links update_links "$src" "$updatedir"
|
||||||
|
move_file "$src" "$dest" "${update_links[@]}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
move_link "$src" "$dest"
|
||||||
|
fi
|
||||||
|
done
|
Loading…
Reference in New Issue
Block a user