summaryrefslogtreecommitdiff
path: root/dotfiles/system/.profile.d/compress.sh
blob: 0a9a7dbf5caec23fd00ebc9c4bffc065913236b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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"
}