Linux使用文件名从中派生参数

Linux使用文件名从中派生参数,linux,bash,ffmpeg,sh,Linux,Bash,Ffmpeg,Sh,我在用拉斯比安做一个项目 这是我的情况。我正在创建三个文件: 文件名格式为[日期和时间戳].wav的wav文件 文件名格式为[日期和时间戳].avi的avi文件 名称标记为u[日期和时间戳]的文件 [日期和时间戳]的值在所有三个文件中都是一致的 我要做的是查找所有以marker_开头的文件,获取[date_and_timestamp]部分,并将其作为参数传递给ffmpeg,以组合这两个文件(即,以如下所示的命令结束 ffmpeg -i /home/motion/[date_and_timesta

我在用拉斯比安做一个项目

这是我的情况。我正在创建三个文件:

  • 文件名格式为[日期和时间戳].wav的wav文件
  • 文件名格式为[日期和时间戳].avi的avi文件
  • 名称标记为u[日期和时间戳]的文件
  • [日期和时间戳]的值在所有三个文件中都是一致的

    我要做的是查找所有以marker_开头的文件,获取[date_and_timestamp]部分,并将其作为参数传递给
    ffmpeg
    ,以组合这两个文件(即,以如下所示的命令结束

    ffmpeg -i /home/motion/[date_and_timestamp].avi -i /home/motion/[date_and_timestamp].wav /home/motion/[date_and_timestamp].mp4
    
    考虑到
    sh
    的强大功能,我知道会有办法,但要知道它是什么,我还有很长的路要走


    为了清晰起见,方括号在那里。它们不会出现在文件名中。

    您似乎在寻找类似的内容

    for marker in marker_*; do
        ffmpeg -i "${marker#marker_}.avi" -i "${marker#marker_}.wav" "${marker#marker_}.mp4"
    done
    
    在正确的目录中运行它,就不必在
    ffmpeg
    命令中硬编码路径名

    符号
    ${variable#prefix}
    产生
    变量的值,如果存在
    前缀
    将被删除。有一个类似的结构,使用
    %
    删除后缀

    ls -l marker_* | awk -F[ '{ system("ffmpeg -i /home/motion/["$2".avi -i /home/motion/["$2".wav /home/motion/["$2".mp4") }'
    

    这将列出以marker_u开头的所有文件,并将其传递给awk,提取日期和时间戳($2,由[]分隔)然后使用它将日期传递给awk系统函数,并形成一个要执行的命令。在生成与系统函数一起使用的命令时,请特别注意引号。

    这可能是epic的重复。我试图使用awk->数组,然后迭代数组。您的方法比e优雅。谢谢!-它没有做任何有用的事情,shell已经扩展了通配符。
    printf“%s\n”marker.*
    将是一种更加健壮和正确的方法来驱动管道,但仍然不能正确处理包含换行符的文件名。