about summary refs log tree commit diff stats
path: root/modules/home.legacy/conf/lf/commands/scripts/archive.sh
diff options
context:
space:
mode:
Diffstat (limited to 'modules/home.legacy/conf/lf/commands/scripts/archive.sh')
-rwxr-xr-xmodules/home.legacy/conf/lf/commands/scripts/archive.sh77
1 files changed, 77 insertions, 0 deletions
diff --git a/modules/home.legacy/conf/lf/commands/scripts/archive.sh b/modules/home.legacy/conf/lf/commands/scripts/archive.sh
new file mode 100755
index 00000000..25f40534
--- /dev/null
+++ b/modules/home.legacy/conf/lf/commands/scripts/archive.sh
@@ -0,0 +1,77 @@
+#! /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