我有一个 cron 作业,它运行一个脚本来解压某个目录(/rared,为了便于讨论)中的所有文件,并将解压后的文件放在 /unrared 中。我想更改此脚本,以便它从 /rared 中删除原始 rar 档案只有成功提取后。
这并不意味着 unrar 有已报告它们已被完全提取,因为我以前在解压缩过程中遇到过数据损坏的情况。
理想情况下(这只是一个不切实际的想法,只是为了让你了解我的目标),unrar 程序将包含此功能,将预期的 md5sum 值与实际的 md5sum 值进行比较,并且仅在它们匹配时才删除存档。如果有必要,我不介意编写整个过程的脚本,但必须比两次解压缩并比较 md5sum 更好的方法。
答案1
我的一个朋友一直在研究一个 bash shell 脚本来执行此操作,该脚本位于 github 上。
答案2
这是我目前拥有的脚本,它首先检查当前是否有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 1
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