Compare commits

...

5 Commits

Author SHA1 Message Date
Matteo Cypriani d321ec9761 [archivers] xzize: output file to same directory
Fix bug that caused the output file to always be generated in the
current working directory.
2019-10-28 16:20:50 +01:00
Matteo Cypriani 4147272b47 [archivers] xzize: improve doc 2019-10-28 16:20:12 +01:00
Matteo Cypriani 718768755c [archivers] xzize: reindent 2019-10-28 16:03:31 +01:00
Matteo Cypriani 3fb819f430 [archivers] xzize: shellcheck 2019-10-28 15:57:21 +01:00
Matteo Cypriani dbb0d6bf3a [ssh_tools] tabssh: handle tmux 2019-10-22 10:49:40 +02:00
3 changed files with 133 additions and 119 deletions

View File

@ -43,11 +43,13 @@ compressed file to XZ (with default compression level).
Known compression formats are GZip (.gz), BZip2 (.bz2), LZMA (.lzma), and
Lempel-Ziv (.Z). Short tar compressed suffixes are also allowed: .tgz, .tbz,
.tb2, .tlz, .taz.
.tb2, .tlz, .taz (and the output file's extension will be .txz).
In case of recompression, the original compressed file is kept. In case of
compression (i.e. when the suffix of the file does not correspond to a known
compression format), the original uncompressed file is removed.
In case of recompression, the original compressed file is kept (so you can
compare input and output file sizes and decide to keep the original or the
recompressed file). In case of compression (i.e. when the suffix of the file
does not correspond to a known compression format), the original uncompressed
file is removed.
**Note**: the atool package provides the `arepack` command, which can
recompress to several formats and not only to XZ. `xzize` has the advantage to

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# xzize.sh, Copyright © 2010 Matteo Cypriani
# xzize.sh, Copyright © 2010, 2019 Matteo Cypriani
#
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
@ -8,156 +8,159 @@
# 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, .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
# file is removed.
# If the file is already XZ compressed (.xz, .txz), nothing is done.
# This script recompresses to XZ one or several GZip (.gz, .tgz), BZip2 (.bz2,
# .tbz, .tb2), LZMA (.lzma, .tlz), or Lempel-Ziv (.Z, .taz) compressed file(s).
# The original files are kept.
#
# If a file extension does not correspond to a known compression format, that
# 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 -x
set -u
# Destination file suffix when source file name suffix is a
# 3-letter compressed tar suffix:
TAR_XZ_EXT=txz
readonly TAR_XZ_EXT=txz
# Default compression level:
COMPRESSION_LEVEL=
test_extension()
{
FILE="$1"
EXTENSION="$2"
NEWEXTENSION=xz
if [ $# -eq 3 ] ; then
NEWEXTENSION="$3"
fi
FILE="$1"
EXTENSION="$2"
NEWEXTENSION=xz
if [ $# -eq 3 ] ; then
NEWEXTENSION="$3"
fi
BASE="$(basename "$FILE" ."$EXTENSION")"
if [ "$BASE" != "$FILE" ] ; then
DEST="$BASE".$NEWEXTENSION
return 0
fi
BASE="$(echo "$FILE" | sed "s/\.${EXTENSION}//")"
if [ "$BASE" != "$FILE" ] ; then
DEST="$BASE".$NEWEXTENSION
return 0
fi
DEST="$FILE"
return 1
DEST="$FILE"
return 1
}
do_recompress()
{
if [ -e "$DEST" ] ; then
echo "Skipping source file « $SOURCE »: destination file « $DEST » already exists!" >&2
return 0
fi
echo "Recompressing « $SOURCE » to « $DEST »…"
$ACTION -c "$SOURCE" | xz $COMPRESSION_LEVEL >"$DEST"
return $?
if [ -e "$DEST" ] ; then
echo "Skipping source file « $SOURCE »: destination file « $DEST » already exists!" >&2
return 0
fi
echo "Recompressing « $SOURCE » to « $DEST »…"
$ACTION -c "$SOURCE" | xz $COMPRESSION_LEVEL >"$DEST"
return $?
}
## Verify number of arguments ##
if [ $# -lt 1 ] ; then
echo "$0 requires at least one argument!" >&2
exit 2
echo "$0 requires at least one argument!" >&2
exit 2
fi
## Process files ##
for SOURCE in "$@" ; do
# Does source file exist?
if [ ! -e "$SOURCE" ] ; then
echo "Skipping source file « $SOURCE »: does not exist!" >&2
continue
fi
# 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
# Is source file regular?
if [ ! -f "$SOURCE" ] ; then
echo "Skipping source file « $SOURCE »: is not a regular file!" >&2
continue
fi
# GZip
if test_extension "$SOURCE" gz ; then
ACTION=gunzip
do_recompress
continue
fi
# GZip
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
# GZipped Tar (.tgz)
if test_extension "$SOURCE" tgz $TAR_XZ_EXT ; then
ACTION="gunzip"
do_recompress
continue
fi
# BZip2
if test_extension "$SOURCE" bz2 ; then
ACTION=bunzip2
do_recompress
continue
fi
# BZip2
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 (.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
# BZipped Tar (.tb2)
if test_extension "$SOURCE" tb2 $TAR_XZ_EXT ; then
ACTION="bunzip2"
do_recompress
continue
fi
# LZMA
if test_extension "$SOURCE" lzma ; then
ACTION=unlzma
do_recompress
continue
fi
# LZMA
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
# LZMA compressed Tar (.tlz)
if test_extension "$SOURCE" tlz $TAR_XZ_EXT ; then
ACTION="unlzma"
do_recompress
continue
fi
# Compress
if test_extension "$SOURCE" Z ; then
ACTION=uncompress
do_recompress
continue
fi
# Compress
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
fi
# Compressed Tar (.taz)
if test_extension "$SOURCE" taz $TAR_XZ_EXT ; then
ACTION="uncompress"
do_recompress
continue
fi
# XZ
if test_extension "$SOURCE" xz ; then
echo "Skipping source file « $DEST »: has already .xz suffix!" >&2
continue
fi
# XZ
if test_extension "$SOURCE" xz ; then
echo "Skipping source file « $DEST »: has already .xz suffix!" >&2
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
# 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 $COMPRESSION_LEVEL "$SOURCE"
# Uncompressed file: fall back to simple compression
echo "Compressing « $SOURCE » to xz…"
xz $COMPRESSION_LEVEL "$SOURCE"
done
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# tabssh.sh, Copyright © 2013 Matteo Cypriani <mcy@lm7.fr>
# tabssh.sh, Copyright © 2013, 2019 Matteo Cypriani <mcy@lm7.fr>
# (Formerly named cluster-ssh.sh)
#
# This program is free software. It comes without any warranty, to
@ -56,9 +56,14 @@ elif [ $# -ne 1 ] ; then
fi
# Check dependencies
SCREEN=$(command -v screen)
if [ -z "$SCREEN" ] ; then
err "GNU screen is required by this script."
TMUX_CMD=$(command -v tmux)
SCREEN_CMD=$(command -v screen)
if [ -n "$TMUX_CMD" ] ; then
echo "tmux is available, we'll be using it."
elif [ -n "$SCREEN_CMD" ] ; then
echo "tmux is not available, we'll be using GNU screen instead."
else
err "Either tmux or GNU screen is required by this script."
exit $EXIT_DEPENDENCY
fi
@ -82,6 +87,10 @@ fi
# Create the screen tabs
while read -r HOST ; do
SSH="ssh ${LOGIN}${HOST}"
# shellcheck disable=SC2086
$SCREEN -t "$SSH" $SSH
if [ -n "$TMUX_CMD" ] ; then
$TMUX_CMD new-window -d -n "$SSH" -- "$SSH"
else
# shellcheck disable=SC2086
$SCREEN_CMD -t "$SSH" $SSH
fi
done <"$HOSTS"