##############
#
# An arbitrary format archive unpacker, although really we are mainly supporting
-# tar and zip currently, including compressed formats.
+# tar, zip, 7z, and rar at this time.
archive_file="$1"; shift
if [ -z "$archive_file" ]; then
fi
if [ ! -d "$unpack_dir" ]; then
- mkdir "$unpack_dir"
+ mkdir -p "$unpack_dir"
if [ $? -ne 0 ]; then
echo "Could not create the unpacking directory: $unpack_dir"
exit 1
fi
fi
+#hmmm: we could log to a file and spew the file if there's a failure, then
+# remove the file after spewing or after successful run.
+# this is a really commonly repeated pattern that would be nice to support
+# in general.
+
+# record what happened.
+save_err=1
if [[ "$archive_file" =~ .*\.tar$ \
|| "$archive_file" =~ .*\.tar\.gz$ \
|| "$archive_file" =~ .*\.tar\.bz2$ \
+ || "$archive_file" =~ .*\.tar\.xz$ \
|| "$archive_file" =~ .*\.iar$ \
|| "$archive_file" =~ .*\.oar$ \
+ || "$archive_file" =~ .*\.tbz$ \
|| "$archive_file" =~ .*\.tgz$ \
+ || "$archive_file" =~ .*\.txz$ \
|| "$archive_file" =~ .*\.ova$ \
|| "$archive_file" =~ .*\.snarf$ \
]]; then
tar -xf "$archive_file" &>/dev/null
+ save_err=$?
elif [[ "$archive_file" =~ .*\.zip$ \
|| "$archive_file" =~ .*\.epub$ \
|| "$archive_file" =~ .*\.odt$ \
|| "$archive_file" =~ .*\.war$ \
]]; then
unzip "$archive_file" &>/dev/null
-elif [[ "$archive_file" =~ .*\.7z$ \
- ]]; then
+ save_err=$?
+elif [[ "$archive_file" =~ .*\.7z$ ]]; then
7z x "$archive_file" &>/dev/null
+ save_err=$?
+elif [[ "$archive_file" =~ .*\.rar$ ]]; then
+ unrar x "$archive_file" &>/dev/null
+ save_err=$?
fi
-save_err=$?
popd &>/dev/null