递归搜索 RAR 文件并提取它们,提取后删除它们

递归搜索 RAR 文件并提取它们,提取后删除它们

我想递归搜索文件夹,提取 RAR 文件,并删除 .nfo、.svf 和 RAR 文件(*.rar 和 *.r1、*.r2 等)。

我找到了一个递归提取但不能删除的命令:

find ./ -name '*.rar' -exec unrar e {} \;

答案1

添加另一个-exec谓词(rm其中包含),只有第一个谓词成功时才会运行:

find . -name '*.rar' -exec unrar e {} \; -exec rm {} \;

-exec rm {} \;.rar仅当unrar-ing 成功(-exec unrar e {} \;)即unrar返回退出状态 0 时,才会运行以删除文件。


您还可以使用 来执行此操作bash,使用globstar选项以递归方式匹配 glob 模式 ( *.rar),并且如果-ing 成功rm则匹配每个文件:unrar

shopt -s globstar
for f in **/*.rar; do
    unrar e "$f" && rm "$f"
done

答案2

cd FOLDER_WITH_RAR
find . -type f -name '*.rar' -print0 |
    while IFS= read -r -d '' file; do
      dir=$(dirname "$file")
      rar=$(basename "$file")
      cd "$dir"
      echo "file=$file, dir=$dir, rar=$rar"
      unrar x "$rar"
      rm -f "$rar"
      cd -
    done

相关内容