diff options
| author | Craig Jennings <c@cjennings.net> | 2025-09-09 21:49:40 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2025-09-09 21:49:40 -0500 |
| commit | b4d725e7dc2fa4eba5f66ec623b7d79ba6878087 (patch) | |
| tree | 76cc0013d6c65d9b51582c8185d599e4bf9a3833 | |
| parent | 8059618f8eef20da63193350bfa13102303f4b80 (diff) | |
adding compress function
| -rw-r--r-- | dotfiles/system/.profile.d/compress.sh | 75 |
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" +} |
