From 7bb07a62e17ad75ca05a95c143bec97b7a6adfe4 Mon Sep 17 00:00:00 2001 From: krisdoodle45 <86745210+krisdoodle45@users.noreply.github.com> Date: Wed, 6 Oct 2021 18:14:59 +0200 Subject: [PATCH] ext: Give the ability to extract multiple files and wildcards --- .local/bin/ext | 64 +++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/.local/bin/ext b/.local/bin/ext index 6950ff63..b1ada294 100755 --- a/.local/bin/ext +++ b/.local/bin/ext @@ -3,43 +3,43 @@ # A general, all-purpose extraction script. Not all extraction programs here # are installed by LARBS automatically. # -# Default behavior: Extract archive into new directory +# Default behavior: Extract archives 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 1 ;; + *) printf "Options:\\n -c: Extract archives into current directory rather than a new one.\\n" && exit 1 ;; esac done -if [ -z "$extracthere" ]; then - archive="$(readlink -f "$*")" && - directory="$(echo "$archive" | sed 's/\.[^\/.]*$//')" && - mkdir -p "$directory" && - cd "$directory" || exit 1 -else - archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)" 2>/dev/null)" -fi +[ -z "$extracthere" ] && archive="$(realpath "$@" 2>/dev/null)" || archive="$(realpath "${@:2}" 2>/dev/null)" -[ -z "$archive" ] && printf "Give archive to extract as argument.\\n" && exit 1 +[ -z "$archive" ] && printf "Give archives to extract as argument.\\n" && exit 1 -if [ -f "$archive" ] ; then - case "$archive" in - *.tar.bz2|*.tbz2) bsdtar -xf "$archive" ;; - *.tar.xz) bsdtar -xf "$archive" ;; - *.tar.gz|*.tgz) bsdtar -xf "$archive" ;; - *.tar.zst) bsdtar -xf "$archive" ;; - *.tar) bsdtar -xf "$archive" ;; - *.lzma) unlzma "$archive" ;; - *.bz2) bunzip2 "$archive" ;; - *.rar) unrar x -ad "$archive" ;; - *.gz) gunzip "$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 +while IFS= read -r f ; do + if [ -f "$f" ] ; then + if [ -z "$extracthere" ]; then + directory="$(echo "$f" | sed 's/\.[^\/.]*$//')" && + mkdir -p "$directory" && + cd "$directory" || continue + fi + case "$f" in + *.tar.bz2|*.tbz2) bsdtar -xf "$f" ;; + *.tar.xz) bsdtar -xf "$f" ;; + *.tar.gz|*.tgz) bsdtar -xf "$f" ;; + *.tar.zst) bsdtar -xf "$f" ;; + *.tar) bsdtar -xf "$f" ;; + *.lzma) unlzma "$f" ;; + *.bz2) bunzip2 "$f" ;; + *.rar) unrar x -ad "$f" ;; + *.gz) gunzip "$f" ;; + *.zip) unzip "$f" ;; + *.Z) uncompress "$f" ;; + *.7z) 7z x "$f" ;; + *.xz) unxz "$f" ;; + *.exe) cabextract "$f" ;; + *) printf "extract: '%s' - unknown archive method\\n" "$f" ;; + esac + else + printf "File \"%s\" not found.\\n" "$f" + fi +done <<< "$archive"