脚本/应用程序来解压文件,并只删除成功解压的档案

脚本/应用程序来解压文件,并只删除成功解压的档案

我有一个 cron 作业,它运行一个脚本来解压某个目录(/rared,为了便于讨论)中的所有文件,并将解压后的文件放在 /unrared 中。我想更改此脚本,以便它从 /rared 中删除原始 rar 档案只有成功提取后

这并不意味着 unrar 有已报告它们已被完全提取,因为我以前在解压缩过程中遇到过数据损坏的情况。

理想情况下(这只是一个不切实际的想法,只是为了让你了解我的目标),unrar 程序将包含此功能,将预期的 md5sum 值与实际的 md5sum 值进行比较,并且仅在它们匹配时才删除存档。如果有必要,我不介意编写整个过程的脚本,但必须比两次解压缩并比较 md5sum 更好的方法。

答案1

我的一个朋友一直在研究一个 bash shell 脚本来执行此操作,该脚本位于 github 上。

https://github.com/arfoll/unrarall

答案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

相关内容