Я ищу гибкий сценарий bash, чтобы делать следующее:
Заранее спасибо.
Я думаю, вы захотите использовать case
оператор, чтобы выбрать, как распаковать входной архив на основе имени файла (или, возможно, использовать file
вместо этого основывать его на содержании). Распакуйте входной архив во временный каталог, направив stdout / stdin в / dev / null или в файл. Тогда беги zip
на содержимом временного каталога, сохраняя имя файла, указанное в командной строке. Удалите временный каталог.
Что-то вроде этого (НЕПРОВЕРЕНО):
infile="$1"
outfile="$2"
# Add syntax checking here
tempdir=`mktemp -d`
case "$infile" in
*.tar.gz)
tar -C "$tempdir" -xzf "$infile" 2>/dev/null
;;
*.tar)
tar -C "$tempdir" -xf "$infile" 2>/dev/null
;;
... # Add handling for other input formats here
*)
echo "Unrecognized input format" >&2
false
;;
esac
if [ $? -ne 0 ]; then
echo "Error processing input file $infile" >&2 # or just echo "error"
rm -rf "$tempdir"
exit 1
fi
(cd "$tempdir" && zip "$outfile" .)
rm -rf "$tempdir"
Вам нужно будет определить, какие ошибки вы получаете от tar и т. Д., Когда архив «зашифрован», и соответствующим образом обновить сообщения об ошибках, чтобы они соответствовали тому, что вам нужно. Но это должно дать вам разумную отправную точку.
Использовать tgz2zip. Это похоже на сценарий ретрейсила, но законченный.