如何将文件名列表拆分为n个项目组,以便在命令行中对每个组执行某些命令?

时间:2017-03-07 19:37:54

标签: bash

我有一个文件夹,这些文件属于可变编号组,按照创建时间的顺序命名。在一个文件夹中,如果它在这种情况下是三个一组,则前三个视频属于一起,第四个到第六个视频一起等。如何使用命令行对这三个文件名组执行命令?

更具体地说,如果它很重要,我实际上想使用mkvmerge使用如下命令合并每组n个文件:

$ mkvmerge -o newfile.mkv '[' file1.mkv ... filen.mkv ']'

编辑:

在这些示例目录中,预先/有四个视频,我想说要分组成两个。前两个走在一起,最后两个走在了一起。 接下来,在帖子/前三个一起去,最后三个一起去。即这些小组遵循他们总是被命名的顺序。

  • 前/
    --- 2017-01-03-10-23.mkv
    --- 2017-01-03-10-28.mkv
    --- 2017-01-03-11-04.mkv
    --- 2017-01-03-11-10.mkv
  • 后/
    --- 2017-01-03-08-01.mkv
    --- 2017-01-03-08-10.mkv
    --- 2017-01-03-08-23.mkv
    --- 2017-01-03-08-59.mkv
    --- 2017-01-03-09-08.mkv
    --- 2017-01-03-09-15.mkv

2 个答案:

答案 0 :(得分:1)

如果要对文件的块(常量)执行某些操作,那么可能对实用程序parallel感兴趣:

find ./post -type f -name "*.mkv" | sort | parallel -P1 -n3 mkvmerge '[' {1} {2} {3} ']'

这里,find命令首先识别感兴趣的文件,其名称因此被排序。然后,命令parallel以大小为3(-n3)的块处理这些文件。此外,使用-P选项,您可以控制处理的线程数...

答案 1 :(得分:1)

这将一次获取3个文件,并将它们用作mkvmerge

的参数
find . -maxdepth 1 -name "*.mkv" | xargs -L 3 -I '{}' mkvmerge '[' {} {} {} ']'