我有这个bash一线软件,它可以在OSX上正常运行,但是不能在Linux上运行,我怀疑Qnap上的Linux发行版(Busybox)与此有关。
这是在OSX上运行的命令:
find . -type f -name "*.mp4" -exec bash -c 'ffmpeg -i "$0" -c:v copy -c:a libfaac -af "volume=23dB" "fix/$0"' '{}' \;
现在在Qnap上:
find . -type f -name "*.mp4" -exec bash -c 'ffmpeg -i "$0" -c:v copy -c:a libfaac -af "volume=23dB" "fix/$0"' '{}' \;
返回:
BusyBox v1.01(2015.05.21-17:32 + 0000)多调用二进制
用法:找到[路径...] [表达式]
在目录层次结构中搜索文件。默认的PATH是当前目录。默认的EXPRESSION是'-print'
EXPRESSION可以包括:-follow取消引用符号链接。-name PATTERN文件名(删除了前导目录)与PATTERN相匹配。-print打印(默认和假定)。
-type X文件类型匹配X(其中X是f,d,l,b,c,...中的一个)-perm PERMS权限匹配(+ NNN)中的任何一个;全部(-NNN); 或恰好(NNN)-mtime TIME修改的时间大于(+ N);或者 小于(-N);或正好(N)天
就像find命令不起作用一样,所以如果我单独执行find命令:
find . -type f -name "*.mp4"
它工作正常,我得到了所有文件,因此我怀疑问题是将文件传递给exec命令,而这是我无法弄清楚的地方
bash版本osx:GNU bash版本3.2.57(1)-发行版(x86_64-apple-darwin14)
bash版本linux:GNU bash版本3.2.57(1)-发行版(i686-pc-linux-gnu)
你为什么不只管?在这种特殊情况下,如果您使用管道传输,调试起来会更容易。
—
theoden
BusyBox不是您的典型Linux系统(即,带有扩展名的POSIX)。相反,BusyBox是缺少许多功能的实用程序的集合。从积极的一面看,您可以在BusyBox上运行的脚本可能会在其他系统上运行。该问题应改为“ BusyBox”。
—
Thomas Dickey
好主意,如何将每个文件传递给ffmpeg?
—
fingertwist
@ThomasDickey是的,这就是我所怀疑的,不知道如何解决这个问题,以便让我的一支班轮在Busybox上工作..
—
fingertwist
我不会一味地尝试:将复杂的论点
—
Thomas Dickey
-exec
变成一个单独的脚本可能是一个很好的起点。通过保持简单,您可以查明局限性以一对一地解决。