#!/bin/sh # Craig Jennings # convenience compression function compress () { if [ $# -ne 2 ]; then echo "Usage: compress " 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" }