-if [[ $unpack_file =~ .*\.tar$ \
- || $unpack_file =~ .*\.tar\.gz$ \
- || $unpack_file =~ .*\.tar\.bz2$ \
- || $unpack_file =~ .*\.tgz$ ]]; then
- tar -xf $unpack_file &>/dev/null
-elif [[ $unpack_file =~ .*\.zip$ \
- || $unpack_file =~ .*\.jar$ \
- || $unpack_file =~ .*\.iar$ \
- || $unpack_file =~ .*\.oar$ ]]; then
- unzip $unpack_file &>/dev/null
+#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" =~ .*\.jar$ \
+ || "$archive_file" =~ .*\.war$ \
+ ]]; then
+ unzip "$archive_file" &>/dev/null
+ 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=$?