#!/bin/bash # A simple script to convert non-tar-archives to tar.gz as source service # # (C) by Mirko Dölle # # derived from obs-service-recompress from Adrian Schröter # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # See http://www.gnu.org/licenses/gpl-2.0.html for full license text. # defaults FILE="" FORMAT="" OUTDIR="" while test $# -gt 0; do case $1 in *-format) FORMAT="$2" shift ;; *-file) FILES="$FILES ${2##*/}" shift ;; *-outdir) OUTDIR="$2" shift ;; *) echo "Unknown parameter $1." echo 'Usage: rearchive --format $FORMAT --file $FILE' exit 1 ;; esac shift done if [ -z "$FILES" ]; then echo "ERROR: no inputs files are given via --file parameter!" exit 1 fi if [ -z "$OUTDIR" ]; then echo "ERROR: no output directory is given via --outdir parameter!" exit 1 fi for i in $FILES; do FILE=$(ls -1 ${i} _service\:*\:${i#_service:*:} 2>/dev/null|tail -n 1 || echo "") if [ -z "${FILE}" ]; then # quietly skip non-existing archive files continue fi BASENAME="$FILE" if [ "${FORMAT}" = "zip" -o "${FILE%.zip}" != "$FILE" ]; then UNPACK="unzip -nqq" BASENAME="${FILE%.*}" elif [ "${FORMAT}" = "rar" -o "${FILE%.rar}" != "$FILE" ]; then UNPACK="unrar e -o- -inul" BASENAME="${FILE%.*}" else echo "ERROR: unsupported/undetected source archive ${FILE}!" exit 1 fi NEWFILE="${BASENAME#_service:.*:}.tar.gz" if [ -e "${NEWFILE}" ]; then echo "ERROR: will not overwrite existing tar archive ${NEWFILE}!" exit 1 fi # do the real work WORKDIR=${PWD} TEMPDIR=$(mktemp -d "${FILE}.XXXXXXXX") cd "${TEMPDIR}" ${UNPACK} "${WORKDIR}/${FILE}" && tar czf "${OUTDIR}/${NEWFILE}" $(ls -1AU) || exit 1 cd - > /dev/null rm -fR "${TEMPDIR}" if [ "${FILE#_service:}" != "$FILE" ]; then # we can remove service files, no need to store them twice rm -f "$FILE" fi done exit 0