From 62c781d63ce1047169193710c26c56c5aef6dd60 Mon Sep 17 00:00:00 2001 From: Guiorgy Date: Fri, 9 Feb 2024 01:14:33 +0400 Subject: [PATCH] handle files of any path --- vackup | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/vackup b/vackup index 168a963..6b0fa43 100755 --- a/vackup +++ b/vackup @@ -43,6 +43,19 @@ vackup load IMAGE VOLUME EOF } +fulldirname() { + DIRECTORY=$(dirname "$1") + + case "$DIRECTORY" in + \/*) ;; + \.*) ;& # fallthrough + *) DIRECTORY="$(pwd)/$DIRECTORY" ;; + esac + DIRECTORY=$(readlink -m "$DIRECTORY") + + echo "$DIRECTORY" +} + if [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then usage exit 0 @@ -66,12 +79,13 @@ cmd_export() { # TODO: check if file exists on host, if it does # create a option for overwrite and check if that's set -# TODO: if FILE_NAME starts with / we need to error out -# unless we can translate full file paths + + DIRECTORY=$(fulldirname "$FILE_NAME") + FILE_NAME=$(basename "$FILE_NAME") if ! docker run --rm \ -v "$VOLUME_NAME":/vackup-volume \ - -v "$(pwd)":/vackup \ + -v "$DIRECTORY":/vackup \ busybox \ tar -zcvf /vackup/"$FILE_NAME" /vackup-volume; then @@ -100,12 +114,13 @@ cmd_import() { # TODO: check if file exists on host, if it does # create a option for overwrite and check if that's set -# TODO: if FILE_NAME starts with / we need to error out -# unless we can translate full file paths + + DIRECTORY=$(fulldirname "$FILE_NAME") + FILE_NAME=$(basename "$FILE_NAME") if ! docker run --rm \ -v "$VOLUME_NAME":/vackup-volume \ - -v "$(pwd)":/vackup \ + -v "$DIRECTORY":/vackup \ busybox \ tar -xvzf /vackup/"$FILE_NAME" -C /; then