From b0dbf5fe2c3de1fb2e128f94235e70bd625991f1 Mon Sep 17 00:00:00 2001 From: Guiorgy Date: Fri, 1 Nov 2024 22:09:13 +0400 Subject: [PATCH] handle files of any path --- vackup | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/vackup b/vackup index d2da5a7..7cb2125 100755 --- a/vackup +++ b/vackup @@ -78,6 +78,19 @@ error() { handle_error $LINE_NUMBER $CODE } +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 @@ -98,12 +111,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 @@ -137,12 +151,12 @@ cmd_import() { exit 1 fi -# 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