bash: 在文件中写入文件名列表和附加文本

bash: write list of file names in a file with additional texts

我想为文件夹中的每个文件名将一些文本写入文件。像这样:

echo "file $(ls *.png) \n duration 0.12" >  test.txt

但是,这段代码只是在文件的开头添加 file 并在文件末尾添加 \n duration 0.12 以及介于两者之间的文件列表,而我想要这样的东西:

  file 1.png
  duration 0.12
  file 2.png 
  duration 0.12

文件实际必须是ffmpeg concat demuxer的格式。

我知道我也许可以使用循环。但是,我不知道是否有更短的命令或者循环是否与 ls 或另一个 linux 命令一样有效?

使用 GNU 查找:

find . -maxdepth 1 -name "*.png" -type f -printf "file %f\nduration 0.12\n"

参见:man find

你可以像这样使用 bash "globbing":

printf "file %s\nduration 0.12\n" *.png

示例输出

file a.png
duration 0.12
file alpha.png
duration 0.12
file b.png
duration 0.12
file bg.png
duration 0.12

请注意,如果您希望它们按特定顺序排列,您可以这样做:

printf "file %s\nduration 0.12\n" d*.png t*.png p*.png

关键字:ffmpeg、concat demuxer、文件和持续时间