0

不确定这是否可能...

我正在尝试编写一个终端命令(linux),它将查找具有特定扩展名的所有视频文件,然后使用 HandBrakeCLI 转换它们

我有前半部分:

find . -type f -name "*.avi*" -exec

我有一个有效的 HandBrakeCLI 命令:

HandBrakeCLI -i file.mkv -o file2.mkv -e x265 --vfr -q 20 --all-audio --all-subtitles

我一直无法弄清楚的是如何将在 find 中找到的文件的文件名/路径插入到 file.mkv 中,然后以相同的文件名但以 mkv 格式输出转换后的文件。

是否可以在一行中执行此操作,或者我是否需要在 bash 脚本中将其分解?

4

1 回答 1

1

作为一个单行,尝试类似的东西:

find . -type f -name "*.avi" -print0 | perl -pe 's/\.avi\0/\0/g' | xargs -0 -I% HandBrakeCLI -i %.avi -o %.mkv -e x265 --vfr -q 20 --all-audio --all-subtitles

find 中的 -print0 选项在标准输出上打印文件名,后跟一个空字符。
以下 perl 片段删除了 .avi 扩展名以将基本名称提供给 xargs。
xargs 中的 -I% 选项将“%”替换为从标准输入读取的名称。

于 2018-07-31T03:01:32.423 回答