【问题标题】:FFprobe to recursively search files to output to csvFFprobe 递归搜索文件以输出到 csv
【发布时间】:2020-09-05 13:16:07
【问题描述】:

我正在尝试运行 bash 脚本,但遇到了一些错误。

我想递归地使命令搜索文件夹并查找所有 mp4 文件。然后我希望它运行 ffprobe 命令并将其输出到不同位置的 csv 文件,并使用它运行的 mp4 的文件名 .csv

到目前为止我有这个

#!/bin/bash

for file in /this/is/directory1/*.mp4; do
    ffprobe -show_packets -of csv=print_section=0 $file >> /this/is/directory2/${file}.csv

done

【问题讨论】:

  • 究竟是什么错误

标签: bash csv directory mp4 ffprobe


【解决方案1】:

试试这个:

find . -type f -name "*.mp4" | xargs -I{} bash -c "ffprobe -show_packets -of csv=print_section=0 {} > /tmp/\$(basename {} | cut -d. -f1).csv"

或者不使用xargs

find . -type f -name "*.mp4" -exec bash -c "ffprobe -show_packets -of csv=print_section=0 {} > /tmp/\$(basename {} | cut -d. -f1).csv" ';'

在上面的命令中更改目录输出文件的路径。

【讨论】:

  • 有没有办法在 tmp 中自动为 csv 创建一个新目录。比如this/is/directory1/.mp4然后在tmp文件夹下创建/tmp/directory1/.csv
  • 该死的,这是一个大命令。 find . -type f -name "*.txt" | xargs -I{} bash -c "ffprobe -show_packets -of csv=print_section=0 {} | mkdir -p /tmp/\$(basename \$(dirname {})) && tee /tmp/\$(basename \$(dirname {}))/\$(basename {} | cut -d. -f1).csv" 不确定它是否会工作
  • 我试试看。是否也可以在 .csv 开头添加文件名,可能在 csv 文件的开头使用管道或“*.mp4”。
  • 应该是,但是很难将所有内容都塞进一个衬里脚本中。您最初的要求足够小。如果您需要越来越复杂,您应该创建一个您最初尝试执行的 bash 脚本。这样您就可以保持代码的可读性和可维护性。
猜你喜欢
  • 1970-01-01
  • 2010-12-24
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 2014-12-09
  • 2021-01-25
相关资源
最近更新 更多