Skip to content

Commit 4b4c5a6

Browse files
committed
Extend v-extract-fs-archive to allow archive testing and extracting only specific paths (for tar)
1 parent 3497037 commit 4b4c5a6

File tree

1 file changed

+29
-11
lines changed

1 file changed

+29
-11
lines changed

bin/v-extract-fs-archive

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
user=$1
88
src_file=$2
99
dst_dir=$3
10+
selected_dir=$4
11+
test=$5
1012

1113
# Includes
1214
source $HESTIA/func/main.sh
@@ -15,7 +17,7 @@ source $HESTIA/func/main.sh
1517
# Verifications #
1618
#----------------------------------------------------------#
1719

18-
check_args '3' "$#" 'USER ARCHIVE DIRECTORY'
20+
check_args '3' "$#" 'USER ARCHIVE DIRECTORY [SELECTED_DIR] [TEST]'
1921
is_format_valid 'user'
2022
is_object_valid 'user' 'USER' "$user"
2123

@@ -34,7 +36,7 @@ fi
3436

3537
# Checking source path
3638
rpath=$(readlink -f "$src_file")
37-
if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
39+
if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir|^$BACKUP/$user\.|^$BACKUP/tmp\.")" ]; then
3840
echo "Error: invalid source path $src_file"
3941
exit 2
4042
fi
@@ -49,17 +51,28 @@ fi
4951
# Extracting gziped archive
5052
if [ ! -z "$(echo $src_file |egrep -i '.tgz|.tar.gz')" ]; then
5153
x='yes'
52-
sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
53-
sudo -u $user -- tar -xzf "$src_file" -C "$dst_dir" >/dev/null 2>&1
54-
rc=$?
54+
if [ -z "$test" ] || [ "$test" = "no" ]; then
55+
sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
56+
sudo -u $user -- tar -xzf "$src_file" -C "$dst_dir" --no-wildcards "$selected_dir" >/dev/null 2>&1
57+
rc=$?
58+
else
59+
sudo -u $user -- tar -tf "$src_file" --no-wildcards "$selected_dir" >/dev/null 2>&1
60+
rc=$?
61+
fi
62+
5563
fi
5664

5765
# Extracting bziped archive
5866
if [ ! -z "$(echo $src_file |egrep -i '.tbz|.tar.bz')" ]; then
5967
x='yes'
60-
sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
61-
sudo -u $user -- tar -xjf "$src_file" -C "$dst_dir" >/dev/null 2>&1
62-
rc=$?
68+
if [ -z "$test" ] || [ "$test" = "no" ]; then
69+
sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
70+
sudo -u $user -- tar -xjf "$src_file" -C "$dst_dir" --no-wildcards "$selected_dir" >/dev/null 2>&1
71+
rc=$?
72+
else
73+
sudo -u $user -- tar -tf "$src_file" --no-wildcards "$selected_dir" >/dev/null 2>&1
74+
rc=$?
75+
fi
6376
fi
6477

6578
# Extracting gziped file
@@ -96,9 +109,14 @@ fi
96109
# Extracting tared archive
97110
if [ ! -z "$(echo $src_file |grep -i '.tar')" ] && [ -z "$x" ]; then
98111
x='yes'
99-
sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
100-
sudo -u $user -- tar -xf "$src_file" -C "$dst_dir" >/dev/null 2>&1
101-
rc=$?
112+
if [ -z "$test" ] || [ "$test" = "no" ]; then
113+
sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
114+
sudo -u $user -- tar -xf "$src_file" -C "$dst_dir" --no-wildcards "$selected_dir" >/dev/null 2>&1
115+
rc=$?
116+
else
117+
sudo -u $user -- tar -tf "$src_file" --no-wildcards "$selected_dir" >/dev/null 2>&1
118+
rc=$?
119+
fi
102120
fi
103121

104122
# Extracting rared archive

0 commit comments

Comments
 (0)