如何组合使用find -execdir与grep过滤ffprobe输出并保存到文件
缺少的核心环节
你没有把单文件命令里的输出重定向规则同步写到find的-execdir执行逻辑中,ffprobe默认会把音视频流信息输出到标准错误流(stderr)而非标准输出流(stdout),你单文件命令里的2>&1 >/dev/null就是用来做流转换、丢弃无用输出的,这部分在遍历命令里被遗漏了,导致grep拿不到需要过滤的内容。
可用的完整命令
基础版(仅输出Stream信息)
find . -name "*.mp4" -execdir ffprobe "{}" 2>&1 >/dev/null \; | grep "Stream" > 结果文件路径.txt
带文件名关联版(输出Stream的同时标注对应文件,方便溯源)
find . -name "*.mp4" -exec sh -c 'echo "当前文件: $1"; ffprobe "$1" 2>&1 >/dev/null | grep "Stream"' _ {} \; > 结果文件路径.txt
逻辑说明
find遍历到mp4文件后,直接执行带重定向规则的ffprobe命令,把原本输出到stderr的流信息转成stdout输出,同时丢弃无用的stdout内容- 所有文件的
ffprobe输出汇总后统一传给grep过滤包含Stream的行 - 最终过滤结果通过重定向写入指定文件即可
内容的提问来源于stack exchange,提问作者pasan
相关产品推荐
相关产品推荐

