【发布时间】:2021-08-19 16:57:40
【问题描述】:
我的下载程序会自动解压缩 rar 档案,这一切都很好,因为 Sonarr 和 Radarr 需要导入原始视频文件。但是现在我的下载硬盘已经装满了我不再需要的所有这些视频文件。
我尝试过修改现有脚本,但每一步似乎都让我离目标更远。
这是我到目前为止所拥有的(这不起作用,我显然不知道我在做什么)。我的主要问题是我还无法正确找到文件。该脚本直接跳转到“未找到文件”。所以我至少做错了搜索。或者我很确定我可能需要使用我不知道的不同方法从头开始完全重写..
#!/bin/bash
# Find video files and if it came from a rar, remove it.
# If no directory is given, work in local dir
if [ "$1" = "" ]; then
DIR="."
else
DIR="$1"
fi
# Find all the MKV files in this dir and its subdirs
find "$DIR" -type f -name '*.mkv' | while read filename
do
# If video file and rar file exists, delete mkv.
for f in ...
do
if [[ -f "$DIR/*.mkv" ]] && [[ -f "$DIR/*.rar" ]]
then
# rm $filename
printf "[Dry run delete]: $filename\n"
else
printf "No files found\n"
exit 1
fi
done
之前和之后的目录结构示例。请注意,文件名通常与提取的文件不同。而且我想单独留下其他没有 rars 的文件夹。
之前:
/folder/moviename/Movie.that.came.from.rar.2021.dvdrip.mkv
/folder/moviename/movie.rar
/folder/moviename/movie.r00
/folder/moviename/movie.r01
/folder/moviename2/Movie.that.lives.alone.2021.dvdrip.mkv
/folder/moviename2/Movie.2021.dvdrip.nfo
之后
# (deleted the mkv only from the first folder)
/folder/moviename/movie.rar
/folder/moviename/movie.r00
/folder/moviename/movie.r01
# (this mkv survives)
/folder/moviename2/Movie.that.lives.alone.2021.dvdrip.mkv
/folder/moviename2/Movie.2021.dvdrip.nfo
TL:DR 我想要一个脚本以递归方式在我的下载驱动器中查找视频文件和 rar 文件,如果在同一个文件夹中看到两者,请删除视频文件。
【问题讨论】:
-
你能提供更多关于“这不起作用”的细节吗?
-
抱歉含糊不清,我修改了很多脚本并得到了不同的失败。在上面的这个例子中,它直接跳到“没有找到文件”。我相信我的主要问题是我如何做“if mkv && rar”部分可能是错误的。
-
缺少一个
done,而for f in ...会将f设置为字符串...,这不太可能是您想要的。你能在脚本运行前后显示一个最小的代表性目录树吗? -
是的,我经常为完成的数量而苦恼。在我的东西上添加了之前和之后。希望很清楚。
-
请注意,我们需要在这里提出狭隘、具体的问题——理想的问题不是“这是我的脚本,这是它应该做的,请帮助我找出问题所在”,而是“我写一个执行 X 的脚本,但命令 Y 没有我正在寻找的效果 Z”,理想情况下使用 minimal reproducible example (当不更改运行时)测试 Y 是否在 X 的其他部分离开时执行 Z出去。这样你描述了 X 是什么,所以XY questions 可以被识别,但是人们可以只专注于如何成功修复 Y,所以它是 Z。