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"
}
|