这个 bash 命令可以在 OSX 上运行,但不能在 Busybox 上运行,为什么?

这个 bash 命令可以在 OSX 上运行,但不能在 Busybox 上运行,为什么?

我有这个 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) 多调用二进制

用法:find [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 . -type f -name "*.mp4"

它工作正常,我得到了我所有的文件,所以我怀疑问题在于将文件传递给执行命令,这就是我想不通的地方


bash 版本 osx:GNU bash,版本 3.2.57(1)-发布(x86_64-apple-darwin14)

bash 版本 linux:GNU bash,版本 3.2.57(1)-发布(i686-pc-linux-gnu)

答案1

怀疑它是基于单/双引号定位绊倒查找。

通常我总是在脚本文件(例如 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

一个应该可以工作的快速而粗糙的脚本。

相关内容