summaryrefslogtreecommitdiffstats
path: root/.local/bin
diff options
context:
space:
mode:
authorPeter2020-10-06 20:07:40 +0100
committerPeter2020-10-06 20:07:40 +0100
commitbf4c46e5be1b7802ef30bb4e9f2b90a42eacb737 (patch)
tree73c2406a51f18990ae4f35ae602582100883930e /.local/bin
parent0f362e3f706b69a2e687e0fc8c8eba7b1adf9ebe (diff)
downloaddotfiles-bf4c46e5be1b7802ef30bb4e9f2b90a42eacb737.tar.gz
dotfiles-bf4c46e5be1b7802ef30bb4e9f2b90a42eacb737.tar.bz2
dotfiles-bf4c46e5be1b7802ef30bb4e9f2b90a42eacb737.zip
Add Luke's generic archive extract script
Diffstat (limited to '.local/bin')
-rwxr-xr-x.local/bin/extract45
1 files changed, 45 insertions, 0 deletions
diff --git a/.local/bin/extract b/.local/bin/extract
new file mode 100755
index 0000000..6203acb
--- /dev/null
+++ b/.local/bin/extract
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# A general, all-purpose extraction script. #
+
+# Author: Luke Smith
+
+# Default behavior: Extract archive into new directory
+# Behavior with `-c` option: Extract contents into current directory
+
+while getopts "hc" o; do case "${o}" in
+ c) extracthere="True" ;;
+ *) printf "Options:\\n -c: Extract archive into current directory rather than a new one.\\n" && exit ;;
+esac done
+
+if [ -z "$extracthere" ]; then
+ archive="$(readlink -f "$*")" &&
+ directory="$(echo "$archive" | sed 's/\.[^\/.]*$//')" &&
+ mkdir -p "$directory" &&
+ cd "$directory" || exit
+else
+ archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)")"
+fi
+
+[ "$archive" = "" ] && printf "Give archive to extract as argument.\\n" && exit
+
+if [ -f "$archive" ] ; then
+ case "$archive" in
+ *.tar.bz2|*.tbz2) tar xvjf "$archive" ;;
+ *.tar.xz) tar -xf "$archive" ;;
+ *.tar.gz|*.tgz) tar xvzf "$archive" ;;
+ *.lzma) unlzma "$archive" ;;
+ *.bz2) bunzip2 "$archive" ;;
+ *.rar) unrar x -ad "$archive" ;;
+ *.gz) gunzip "$archive" ;;
+ *.tar) tar xvf "$archive" ;;
+ *.zip) unzip "$archive" ;;
+ *.Z) uncompress "$archive" ;;
+ *.7z) 7z x "$archive" ;;
+ *.xz) unxz "$archive" ;;
+ *.exe) cabextract "$archive" ;;
+ *) printf "extract: '%s' - unknown archive method\\n" "$archive" ;;
+ esac
+else
+ printf "File \"%s\" not found.\\n" "$archive"
+fi