Archives and Compression
Compression Suffix
Choose an Output Name
Compression tools usually add a suffix to an archive name. A case statement can map a selected method to the output file name.
Program
Play the script to choose a compression method and see the resulting archive name.
compression_suffix.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash
method="gzip"
base="reports.tar"
case "$method" in
gzip) output="${base}.gz" ;;
xz) output="${base}.xz" ;;
none) output="$base" ;;
esac
echo "$output"
#!/usr/bin/env bash
method="xz"
base="reports.tar"
case "$method" in
gzip) output="${base}.gz" ;;
xz) output="${base}.xz" ;;
none) output="$base" ;;
esac
echo "$output"
#!/usr/bin/env bash
method="none"
base="reports.tar"
case "$method" in
gzip) output="${base}.gz" ;;
xz) output="${base}.xz" ;;
none) output="$base" ;;
esac
echo "$output"
method ← gzip
3method="gzip"4base="reports.tar"values this stepgzipmethodbase ← reports.tar
3method="gzip"4base="reports.tar"5case "$method" invalues this stepreports.tarbasecase "$method" in
4base="reports.tar"5case "$method" in6 gzip) output="${base}.gz" ;;values this stepgzipmethodoutput ← reports.tar.gz
5case "$method" in6 gzip) output="${base}.gz" ;;7 xz) output="${base}.xz" ;;values this stepreports.tar.gzoutputreports.tarbaseecho "$output"
9esac10echo "$output"outputreports.tar.gzvalues this stepreports.tar.gzoutput
method ← xz
3method="xz"4base="reports.tar"values this stepxzmethodbase ← reports.tar
3method="xz"4base="reports.tar"5case "$method" invalues this stepreports.tarbasecase "$method" in
4base="reports.tar"5case "$method" in6 gzip) output="${base}.gz" ;;values this stepxzmethodoutput ← reports.tar.xz
6gzip) output="${base}.gz" ;;7xz) output="${base}.xz" ;;8none) output="$base" ;;values this stepreports.tar.xzoutputreports.tarbaseecho "$output"
9esac10echo "$output"outputreports.tar.xzvalues this stepreports.tar.xzoutput
method ← none
3method="none"4base="reports.tar"values this stepnonemethodbase ← reports.tar
3method="none"4base="reports.tar"5case "$method" invalues this stepreports.tarbasecase "$method" in
4base="reports.tar"5case "$method" in6 gzip) output="${base}.gz" ;;values this stepnonemethodoutput ← reports.tar
7 xz) output="${base}.xz" ;;8 none) output="$base" ;;9esacvalues this stepreports.taroutputreports.tarbaseecho "$output"
9esac10echo "$output"outputreports.tarvalues this stepreports.taroutput
case
`case "$method" in` selects a branch by pattern.
suffix
The chosen method controls the output suffix.
no compression
The `none` branch keeps the original tar archive name.