У меня есть задание cron, которое запускает скрипт для удаления всех файлов в определенном каталоге (/ rared ради аргумента) и размещения расширенных файлов в / unrared. Я хотел бы изменить этот скрипт, чтобы он удалял исходные архивы rar из / rared , только если они успешно извлечены .
Это не означает, что unrar сообщил , что они были полностью извлечены, потому что у меня было повреждение данных во время декомпрессии ранее.
В идеале (кругосветное небо, просто чтобы дать вам представление о том, за что я стреляю), программа unrar должна включать эту функцию, сравнивая ожидаемое значение md5sum с фактическим значением md5sum и удаляя только архив, если они совпадают. Я не против написать весь этот процесс, если потребуется, но должен быть лучший способ, чем дважды развернуть и сравнить md5sums.
Это сценарий, который у меня есть, он сначала проверяет, выполняется ли текущая операция unrar
, и завершает работу, если она есть (не хочу загружать диск кучами операций чтения / записи). Затем он удаляет все файлы в / rared, которые еще не были разархивированы, помещая извлеченные файлы в / unrared. Он еще не проверяет извлеченные файлы и не удаляет архивы :
#!/bin/sh
# First check if there is an "unrar" running already, if so, exit.
if ps -ef | grep -v grep | grep -v unrarall | grep unrar ; then
exit 0
else
# This line probably unnecessary
PATH=$PATH:/usr/bin/
# The RARs I download are always multi-part, so I have to find the
# first file in the archive and extract only that. This is done
# using the "find" command. -exec means "run this command on the
# file" and the filename is substituted wherever {} is
find /rared/ -name "*part01.rar" -exec unrar -y -o- x \{\} /unrared/ \;
find /rared/ -name "*part001.rar" -exec unrar -y -o- x \{\} /unrared/ \;
find /rared/ -name "*.r00" -exec unrar -y -o- x \{\} /unrared \;
# If you only want .rar files, comment out the above 3 lines and
# uncomment the one below
# find /rared/ -name "*.rar" -exec unrar -y -o- x \{\} /unrared/ \;
fi
Это запись в crontab, которая сопровождает ее:
# m h dom mon dow command
* * * * * rared/unrarall > /dev/null
Мой друг работал над сценарием оболочки bash, чтобы сделать это на github.