[xzize] Handle short-suffix compressed tar
- Handle short-suffix compressed Tar archives. - Test separately if a source file exists and is regular. - Use return value of test_extension() instead of test equality of DEST and SOURCE.
This commit is contained in:
parent
93601c6310
commit
ead9997d68
|
@ -23,7 +23,8 @@ The xzize script compresses an uncompressed file, or recompresses a
|
|||
compressed file to xz (with maximum compression level).
|
||||
|
||||
Known compression formats are GZip (.gz), BZip2 (.bz2), LZMA (.lzma),
|
||||
and Lempel-Ziv (.Z).
|
||||
and Lempel-Ziv (.Z). Short tar compressed suffixes are also allowed:
|
||||
.tgz, .tbz, .tb2, .tlz, .taz.
|
||||
|
||||
In case of recompression, the original compressed file is keeped. In
|
||||
case of compression (i.e. when the suffix of the file does not
|
||||
|
|
|
@ -8,27 +8,38 @@
|
|||
# To Public License, Version 2, as published by Sam Hocevar. See
|
||||
# http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
#
|
||||
# This script recompresses to xz (with maximum compression level) a
|
||||
# GZip (.gz), BZip2 (.bz2), LZMA (.lzma), and Lempel-Ziv (.Z)
|
||||
# compressed file. The original file is keeped.
|
||||
# This script recompresses to XZ (with maximum compression level) a
|
||||
# GZip (.gz, .tgz), BZip2 (.bz2, .tbz, .tb2), LZMA (.lzma, .tlz), and
|
||||
# Lempel-Ziv (.Z, .taz) compressed file. The original file is keeped.
|
||||
# If the file extension does not correspond to a known compression
|
||||
# format, the file is compressed to xz. In that case, the original
|
||||
# format, the file is compressed to XZ. In that case, the original
|
||||
# file is removed.
|
||||
# If the file is already XZ compressed (.xz, .txz), nothing is done.
|
||||
|
||||
|
||||
set -u
|
||||
|
||||
# Destination file suffix when source file name suffix is a
|
||||
# 3-letter compressed tar suffix :
|
||||
TAR_XZ_EXT=txz
|
||||
|
||||
|
||||
test_extension()
|
||||
{
|
||||
local - FILE EXTENSION BASE
|
||||
FILE="$1"
|
||||
EXTENSION="$2"
|
||||
NEWEXTENSION=xz
|
||||
if [ $# -eq 3 ] ; then
|
||||
NEWEXTENSION="$3"
|
||||
fi
|
||||
|
||||
BASE="`basename "$FILE" ."$EXTENSION"`"
|
||||
if [ "$BASE" != "$FILE" ] ; then
|
||||
DEST="$BASE".xz
|
||||
DEST="$BASE".$NEWEXTENSION
|
||||
return 0
|
||||
fi
|
||||
|
||||
DEST="$FILE"
|
||||
return 1
|
||||
}
|
||||
|
@ -57,39 +68,76 @@ fi
|
|||
## Process files ##
|
||||
|
||||
for SOURCE in "$@" ; do
|
||||
# Regular file?
|
||||
# Does source file exist?
|
||||
if [ ! -e "$SOURCE" ] ; then
|
||||
echo "Skipping source file « $SOURCE »: does not exist!" >&2
|
||||
continue
|
||||
fi
|
||||
|
||||
# Does source file is regular?
|
||||
if [ ! -f "$SOURCE" ] ; then
|
||||
echo "Skipping source file « $SOURCE »: is not a regular file!" >&2
|
||||
continue
|
||||
fi
|
||||
|
||||
# GZip
|
||||
test_extension "$SOURCE" gz
|
||||
if [ "$DEST" != "$SOURCE" ] ; then
|
||||
if test_extension "$SOURCE" gz ; then
|
||||
ACTION=gunzip
|
||||
do_recompress
|
||||
continue
|
||||
fi
|
||||
|
||||
# GZipped Tar (.tgz)
|
||||
if test_extension "$SOURCE" tgz $TAR_XZ_EXT ; then
|
||||
ACTION=gunzip
|
||||
do_recompress
|
||||
continue
|
||||
fi
|
||||
|
||||
# BZip2
|
||||
test_extension "$SOURCE" bz2
|
||||
if [ "$DEST" != "$SOURCE" ] ; then
|
||||
if test_extension "$SOURCE" bz2 ; then
|
||||
ACTION=bunzip2
|
||||
do_recompress
|
||||
continue
|
||||
fi
|
||||
|
||||
# BZipped Tar (.tbz)
|
||||
if test_extension "$SOURCE" tbz $TAR_XZ_EXT ; then
|
||||
ACTION=bunzip2
|
||||
do_recompress
|
||||
continue
|
||||
fi
|
||||
|
||||
# BZipped Tar (.tb2)
|
||||
if test_extension "$SOURCE" tb2 $TAR_XZ_EXT ; then
|
||||
ACTION=bunzip2
|
||||
do_recompress
|
||||
continue
|
||||
fi
|
||||
|
||||
# LZMA
|
||||
test_extension "$SOURCE" lzma
|
||||
if [ "$DEST" != "$SOURCE" ] ; then
|
||||
if test_extension "$SOURCE" lzma ; then
|
||||
ACTION=unlzma
|
||||
do_recompress
|
||||
continue
|
||||
fi
|
||||
|
||||
# LZMA compressed Tar (.tlz)
|
||||
if test_extension "$SOURCE" tlz $TAR_XZ_EXT ; then
|
||||
ACTION=unlzma
|
||||
do_recompress
|
||||
continue
|
||||
fi
|
||||
|
||||
# Compress
|
||||
test_extension "$SOURCE" Z
|
||||
if [ "$DEST" != "$SOURCE" ] ; then
|
||||
if test_extension "$SOURCE" Z ; then
|
||||
ACTION=uncompress
|
||||
do_recompress
|
||||
continue
|
||||
fi
|
||||
|
||||
# Compressed Tar (.taz)
|
||||
if test_extension "$SOURCE" taz $TAR_XZ_EXT ; then
|
||||
ACTION=uncompress
|
||||
do_recompress
|
||||
continue
|
||||
|
@ -101,6 +149,12 @@ for SOURCE in "$@" ; do
|
|||
continue
|
||||
fi
|
||||
|
||||
# XZipped Tar (.txz)
|
||||
if test_extension "$SOURCE" txz $TAR_XZ_EXT ; then
|
||||
echo "Skipping source file « $DEST »: seems to be a XZipped Tar archive (.txz suffix)!" >&2
|
||||
continue
|
||||
fi
|
||||
|
||||
# Uncompressed file: fall back to simple compression
|
||||
echo "Compressing « $SOURCE » to xz…"
|
||||
xz -9 "$SOURCE"
|
||||
|
|
Loading…
Reference in New Issue