【发布时间】:2021-11-30 23:50:51
【问题描述】:
我正在尝试使用 xargs 对文件夹中的每个文件运行 ffmpeg 并输出具有 vorbis 音频的文件的名称。
我想出了以下最有效的方法,但在文件名中包含单引号的文件上失败了。
find . -maxdepth 1 | onlyvideos | tr '\n' '\0' | xargs -n1 -0 -I '{}' bash -c "if ( ffmpeg -i '{}' 2>&1 | grep Stream | grep -q vorbis ) ; then echo '{}' ; fi;"
onlyvideos 是我编写的一个脚本,它只将带有视频扩展名的文件的名称打印到标准输出。
如何让xargs 对可能包含单引号和双引号的文件名运行bash -c?
【问题讨论】:
-
如果
find可以做到这一点,你为什么要使用自定义脚本onlyvideos -
另外你应该在使用
xargs -0时将-print0添加到find -
因为我不想每次都手动列出它们:
String[] videoextensions = {"avi", "bdmv", "divx", "flv", "m2ts", "m4v", "mkv", "mp4", "mpg", "mpls", "vob", "webm", "xvid"};。这与我的问题并不真正相关,但我发现我的脚本非常有用并且一直在使用它,除了我的onlymusic脚本。 -
@suleiman 是的。这也与我的问题无关,但我的
onlyvideos脚本目前不支持空值作为分隔符。 -
您是否尝试过从
bash -ccmd 中删除双引号并改用$()?