Um amigo meu tem trabalhado em um script de shell bash para fazer isso que está no github aqui.
Eu tenho um cron job que executa um script para unrar todos os arquivos em um determinado diretório (/ rared por causa do argumento) e colocar os arquivos expandidos em / unrared. Eu gostaria de alterar este script para que ele exclua os arquivos rar originais de / rared somente se eles extraíram com êxito .
Isso não significa que o unrar tenha relatado que eles foram totalmente extraídos, porque eu tive corrupção de dados durante a descompactação antes.
O ideal é que o programa unrar inclua essa funcionalidade, comparando um valor md5sum esperado com o valor md5sum real e excluindo apenas o valor real do md5sum. arquivar se eles corresponderem. Eu não me importo de escrever scripts em todo esse processo se for necessário, mas deve ser uma maneira melhor do que "unraring" duas vezes e comparar md5sums.
Este é o script que eu tenho até agora, ele primeiro verifica se há uma operação unrar
atual em execução e sai se houver (não quero inundar o disco com pilhas de leitura / gravação). Em seguida, ele desabilita todos os arquivos em / rared que ainda não tenham sido não-armazenados, colocando os arquivos extraídos em / unrared. Ainda não verifica os arquivos extraídos ou exclui os arquivos :
#!/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
Esta é a entrada do crontab que o acompanha:
# m h dom mon dow command
* * * * * rared/unrarall > /dev/null