ajout de readlinka et update_links

This commit is contained in:
Jephte CLAIN 2014-12-21 13:40:51 +04:00
parent cc3869707c
commit 613f31ef5b
1 changed files with 23 additions and 7 deletions

View File

@ -768,6 +768,16 @@ function deref() {
done done
abspath "$file" abspath "$file"
} }
function readlinka() {
# Afficher un chemin absolu vers la destination du fichier $1. Si $1 n'est pas
# un lien, afficher simplement le chemin du fichier
if [ -L "$1" ]; then
local linkdir="$(dirname -- "$1")"
abspath "$(readlink "$1")" "$linkdir"
else
abspath "$1"
fi
}
function readlinkm() { function readlinkm() {
# Retourner un chemin absolu vers le fichier $1, dans lequel toutes les # Retourner un chemin absolu vers le fichier $1, dans lequel toutes les
# composantes "lien symbolique" ont été supprimées. Il n'est pas requis que les # composantes "lien symbolique" ont été supprimées. Il n'est pas requis que les
@ -832,6 +842,17 @@ function update_link() {
ln -sf "$dest" "$link" ln -sf "$dest" "$link"
fi fi
} }
function update_links() {
# Mettre à jour les liens $2..@ pour qu'ils pointent vers la nouvelle
# destination $1
[ -n "$1" ] || return 1
local dest="$1"; shift
local r=0 link
for link in "$@"; do
update_link "$dest" "$link" || r=$?
done
return $r
}
function move_link() { function move_link() {
# Déplacer le lien $1 vers $2, et mettre à jour la destination du lien si # Déplacer le lien $1 vers $2, et mettre à jour la destination du lien si
# elle est exprimée de façon relative # elle est exprimée de façon relative
@ -842,10 +863,8 @@ function move_link() {
dest="$(abspath "$dest")" dest="$(abspath "$dest")"
if [ -L "$link" ]; then if [ -L "$link" ]; then
link="$(abspath "$link")" link="$(abspath "$link")"
linkdir="$(dirname -- "$link")"
ldest="$(readlink "$link")"
ldest="$(abspath "$ldest" "$linkdir")"
[ "$dest" == "$link" ] && return 0 [ "$dest" == "$link" ] && return 0
ldest="$(readlinka "$link")"
mv "$link" "$dest" || return 1 mv "$link" "$dest" || return 1
update_link "$ldest" "$dest" update_link "$ldest" "$dest"
else else
@ -895,10 +914,7 @@ function move_file() {
shift; shift shift; shift
[ -d "$dest" ] && dest="$dest/$(basename -- "$src")" [ -d "$dest" ] && dest="$dest/$(basename -- "$src")"
move_link "$src" "$dest" || return 1 move_link "$src" "$dest" || return 1
for link in "$@"; do update_links "$dest" "$@"
update_link "$dest" "$link"
done
return 0
} }
################################################################################ ################################################################################