From e2b2f492140588257816967e1755023f58124063 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Tue, 28 Apr 2020 16:41:47 +0400 Subject: [PATCH] =?UTF-8?q?dk:=20v=C3=A9rifier=20que=20le=20r=C3=A9pertoir?= =?UTF-8?q?e=20destination=20existe=20avant=20rsync?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dk | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/dk b/dk index fda926e..1bd7046 100755 --- a/dk +++ b/dk @@ -806,21 +806,39 @@ function build_update_apps() { if [ -d "$SRC" ]; then [ -n "$have_RSYNC_OPTS" ] || RSYNC_OPTS=(--delete --delete-excluded) local -a rsync_opts; rsync_opts=(-a --exclude .git/ "${RSYNC_OPTS[@]}") + SRC="${SRC%/}/" - DEST="${DEST%/}/" + DEST="${DEST%/}" + if [ ! -d "$DEST" ]; then + # s'assurer que le répertoire parent existe + mkdir -p "$(dirname -- "$DEST")" || { eend; return 1; } + fi + DEST="$DEST/" + estep "Synchro $SRC --> $DEST" rsync "${rsync_opts[@]}" "$SRC" "$DEST" || { eend; return 1; } + elif [ -f "$SRC" ]; then [ -n "$have_RSYNC_OPTS" ] || RSYNC_OPTS=() local -a rsync_opts; rsync_opts=(-a "${RSYNC_OPTS[@]}") - if [ "${DEST%/}" != "$DEST" -o -d "$DEST" ]; then - DEST="${DEST%/}/" - estep "Synchro $SRC --> $DEST" - rsync "${rsync_opts[@]}" "$SRC" "$DEST" || { eend; return 1; } - else - estep "Synchro $SRC --> $DEST" - rsync "${rsync_opts[@]}" "$SRC" "$DEST" || { eend; return 1; } + + if [ "${DEST%/}" != "$DEST" -a ! -d "$DEST" ]; then + # on demande à ce que DEST soit un répertoire mais il + # n'existe pas: le créer + DEST="${DEST%/}" + mkdir -p "$DEST" || { eend; return 1; } fi + + if [ -d "$DEST" ]; then + DEST="$DEST/" + elif [ ! -f "$DEST" ]; then + # la destination n'existe pas: s'assurer que le répertoire + # parent existe + mkdir -p "$(dirname -- "$DEST")" || { eend; return 1; } + fi + estep "Synchro $SRC --> $DEST" + rsync "${rsync_opts[@]}" "$SRC" "$DEST" || { eend; return 1; } + else eerror "$app: $SRC: répertoire/fichier introuvable" eend; return 1