我有这个 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
一个应该可以工作的快速而粗糙的脚本。