You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.5 KiB
2.5 KiB
title | tags |
---|---|
rar2zip | shell, linux, repost |
программист - это такой вид идиота, который потратит час на пятиминутную работу, чтобы потом её за секунду сделал компьютер.
Фичи:
-
Запароленные архивы пропускаются
-
Даты модификации файлов в внутри архивов - сохраняются как есть.
-
Работает полностью автоматически, если невозможно создать файл в исходной директории - матерится и переходит к следующему архиву.
-
Выдает лог работы
-
Понимает как относительные, так и абсолютные пути
-
Использует для своей работы системную временную директорию (обычно это /tmp), берегитесь переполнения. Ограничения:
#!/bin/bash
LOGFILE=$(mktemp)
if [ -z "$1" ]; then
echo "usage: $0 <dir>"
exit 1
fi
find "$1" -name *.rar | while read FILE
do
if [ ! -w "$FILE" ]; then
echo "can't write to file, skipped: $FILE"
continue
fi
# path to file must be absolute, non relative
if [ "${FILE:0:1}" != "/" ]; then
FILE="$(pwd)/$FILE"
fi
unrar t -p- "$FILE" 1> /dev/null 2> /dev/null
if [ "$?" -ne 0 ]; then
echo "Password-protected file, please, repack manually: $FILE" | \
tee "$LOGFILE"
continue
fi
OWNER=$(stat -c "%u" "$FILE")
GROUP=$(stat -c "%g" "$FILE")
FMODE=$(stat -c "%a" "$FILE")
TDIR=$(mktemp -d)
NFILE=$(basename "$FILE" .rar)
NFILE="${NFILE}.zip"
DEST=$(dirname "$FILE")
pushd "$TDIR" > /dev/null
unrar x -ts -ow -idq "$FILE" && \
zip --latest-time --quiet --recurse-paths "$NFILE" *
chown "$OWNER:$GROUP" "$NFILE" && chmod "$FMODE" "$NFILE" && \
mv -i "$NFILE" "$DEST/" && rm "$FILE" && echo "Repacked: $FILE"
popd > /dev/null
rm -rf "$TDIR"
# exit 0
done
echo "See logfile for possible errors: $LOGFILE"
# vim: set syntax=sh ts=2 noet
Единственная проблема: У меня больше не осталось rar-архивов... :-(