summaryrefslogtreecommitdiff
path: root/dotfiles/system/.profile.d
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/system/.profile.d')
-rw-r--r--dotfiles/system/.profile.d/compress.sh75
1 files changed, 75 insertions, 0 deletions
diff --git a/dotfiles/system/.profile.d/compress.sh b/dotfiles/system/.profile.d/compress.sh
new file mode 100644
index 0000000..0a9a7db
--- /dev/null
+++ b/dotfiles/system/.profile.d/compress.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+# Craig Jennings <c@cjennings.net>
+# convenience compression function
+
+compress () {
+ if [ $# -ne 2 ]; then
+ echo "Usage: compress <format> <file_or_directory>"
+ echo "Formats: tar.bz2, tar.gz, bz2, tar, tbz2, tgz, zip, gz, Z"
+ return 1
+ fi
+
+ format="$1"
+ target="$2"
+
+ if [ ! -e "$target" ]; then
+ echo "Error: '$target' does not exist"
+ return 1
+ fi
+
+ basename=$(basename "$target")
+
+ # Determine output filename first
+ case "$format" in
+ tar.bz2|tbz2) output="${basename}.tar.bz2" ;;
+ tar.gz|tgz) output="${basename}.tar.gz" ;;
+ bz2) output="${target}.bz2" ;;
+ gz) output="${target}.gz" ;;
+ tar) output="${basename}.tar" ;;
+ zip) output="${basename}.zip" ;;
+ Z) output="${target}.Z" ;;
+ *)
+ echo "Error: Unknown format '$format'"
+ return 1
+ ;;
+ esac
+
+ # Check if output file already exists
+ if [ -e "$output" ]; then
+ printf "Warning: '%s' already exists. Overwrite? (y/N): " "$output"
+ read -r response
+ case "$response" in
+ [yY]|[yY][eE][sS])
+ rm -f "$output"
+ ;;
+ *)
+ echo "Aborted."
+ return 1
+ ;;
+ esac
+ fi
+
+ # perform the compression
+ case "$format" in
+ tar.bz2|tbz2) tar -cjf "$output" "$target" ;;
+ tar.gz|tgz) tar -czf "$output" "$target" ;;
+ bz2)
+ [ -d "$target" ] && echo "Error: bz2 only works on files" && return 1
+ bzip2 -k "$target"
+ ;;
+ gz)
+ [ -d "$target" ] && echo "Error: gz only works on files" && return 1
+ gzip -k "$target"
+ ;;
+ tar) tar -cf "$output" "$target" ;;
+ zip)
+ [ -d "$target" ] && zip -r "$output" "$target" || zip "$output" "$target"
+ ;;
+ Z)
+ [ -d "$target" ] && echo "Error: Z only works on files" && return 1
+ compress -c "$target" > "$output"
+ ;;
+ esac
+
+ [ $? -eq 0 ] && echo "✓ Created $output" || echo "✗ Compression failed"
+}