我想递归搜索文件夹,提取 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