使用 zcat 和 for 循环将多个文件传递给命令

Passing multiple files using zcat and a for loop to a command

我有这样的目录结构:

Y1/year1fileA.txt.gz
Y1/year1fileB.txt.gz
Y2/year2fileA.txt.gz
Y2/year2fileB.txt.gz
Y3/year3fileA.txt.gz
Y3/year3fileB.txt.gz
Y4/year4fileA.txt.gz
Y4/year4fileB.txt.gz
...

我正计划按该顺序将 <(zcat ./Y1/year1fileA.txt.gz ./Y2/year2fileA.txt.gz ...) 传递给另一个需要 FILE 而不是 stdin 的命令。

我想到了使用: command <(find . -name "*fileA*.gz" -exec zcat {})

在 运行 之后,我意识到文件没有以排序的方式传递到 zcat(即 year4fileA.txt.gzyear1fileA.txt.gz 之前写入)

有没有办法使用 find 并在传递给 zcat 之前对这些文件进行排序?还是应该使用 for 循环?或 xargs?

find 不会对其输出进行排序,但 glob 会。一次匹配所有文件的 glob 应该就足够了:

cmd <(zcat Y*/year*file*.txt.gz)