使用拉取变量查找并执行

使用拉取变量查找并执行

到目前为止,我有一个简单的批处理脚本,可以将 *.mkv 文件从其源文件夹移动到名为“Movies”的文件夹。现在我想让 FileBot 使用“find”命令重命名它们,因为它(filebot)似乎不支持正则表达式。我该如何让 bash 提取文件名变量(不确定这是否是一回事哈哈)并在 find -exec "$FILENAME" 类型的模式中使用它?

这是我所拥有的(伪代码已被注释掉),我相信有更有效的方法来做到这一点。但是嘿,我是一个 python 程序员,而不是 bash 脚本编写者!

mkdir "Movies"
find "Complete/" -iname "*.mkv" -exec mv {} "Movies" \;
#find "Movies/" -iname "*.mkv" -exec filebot -rename "$iname" --db themoviedb"

我需要分别执行 mv 和 filebot 命令,因为最终它们之间会调用更多命令。

答案1

首先,对于第二行,mv 也接受通配符,因此您只需使用

mv 完整/*.mkv 电影

filebot 是否也可以使用通配符?例如 filebot Movies/*.mkv?否则,您只需要再次使用 {} 而不是“$iname”。您可能知道,{} 代替找到的文件的名称,与此处的 *.mkv 相同。因此,

找到“电影/”-iname“*.mkv”-execdir filebot -rename {} --db themoviedb \;

注意:出于安全原因,请使用 -execdir 而不是 -exec。从手册页中:

使用 -exec 操作存在不可避免的安全问题;您应该改用 -execdir 选项。

-execdir 命令 {} +

类似于 -exec,但指定的命令从包含匹配文件的子目录运行,该子目录通常不是您启动 find 的目录。这是一种更安全的调用命令的方法,因为它可以避免在解析匹配文件的路径时出现竞争条件。

相关内容