From ead9997d683c8bc598fbb7b0949eb300e6e70cf1 Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Sun, 31 Jan 2010 16:14:45 +0100 Subject: [PATCH] [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. --- compression_utils/README | 3 +- compression_utils/xzize | 82 +++++++++++++++++++++++++++++++++------- 2 files changed, 70 insertions(+), 15 deletions(-) diff --git a/compression_utils/README b/compression_utils/README index b3830f5..d9e238a 100644 --- a/compression_utils/README +++ b/compression_utils/README @@ -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 diff --git a/compression_utils/xzize b/compression_utils/xzize index 9c9008b..a3c3668 100755 --- a/compression_utils/xzize +++ b/compression_utils/xzize @@ -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"