#! /usr/bin/env dash # shellcheck source=/dev/null SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH # Option '-f' disables pathname expansion which can be useful when $f, $fs, and # $fx variables contain names with '*' or '?' characters. However, this option # is used selectively within individual commands as it can be limiting at # times. set -f # shellcheck disable=SC2269 f="$f" # shellcheck disable=SC2269 fx="$fx" # shellcheck disable=SC2269 fs="$fs" archivers="$(tmp echo gzip xz 7z zip)" archiver="$(awk '{for (i=1; i<=NF; i++) print $i}' "$archivers" | fzf)" case "$archiver" in "gzip") ext=tar.gz ;; "xz") ext=tar.xz ;; "7z") ext=7z ;; "zip") ext=zip ;; esac prompt "Archive name: " name="" while [ -z "$name" ] || [ -e "$name" ]; do read -r name_base name="$name_base.$ext" if [ -e "$name" ]; then prompt "Archive already exists, overwrite [y|N]: " read -r ans if [ "$ans" = "y" ]; then break else prompt "Archive name: " fi fi done root="$(if [ "$(pwd)" = "/" ]; then pwd; else echo "$(pwd)/"; fi)" # fx contains all selected file name separated by a newline while read -r raw_file; do file="$(echo "$raw_file" | sed "s|$root||")" set -- "$@" "$file" done <"$(tmp echo "$fx")" case "$archiver" in "gzip") tar --create --gzip -file="$name" "$@" ;; "xz") tar --create --file="$name" "$@" xz --compress -9 --extreme --threads=0 "$name" ;; "7z") 7z a "$name" "$@" ;; "zip") zip --symlinks -9 -r "$name" "$@" ;; esac # vim: ft=sh