此bash命令在OSX上运行,但不在Busybox上..为什么?


0

我有这个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

我不会一味地尝试:将复杂的论点-exec变成一个单独的脚本可能是一个很好的起点。通过保持简单,您可以查明局限性以一对一地解决。
Thomas Dickey

Answers:


2

怀疑这是基于单/双引号定位跳闸查找。

通常,我总是在脚本文件(例如conv.sh)中使用类似的内容进行更复杂的操作:

find . -type f -name "*.mp4" | while read FILE
do
  ffmpeg -i "$FILE" -c:v copy -c:a libfaac -af "volume=23dB" "fix/$FILE"
done

现在通过调试运行此文件:

bash -xv ./conv.sh

一个快速而肮脏的脚本应该可以工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.