使用 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.gz
在 year1fileA.txt.gz
之前写入)
有没有办法使用 find
并在传递给 zcat
之前对这些文件进行排序?还是应该使用 for 循环?或 xargs
?
find
不会对其输出进行排序,但 glob 会。一次匹配所有文件的 glob 应该就足够了:
cmd <(zcat Y*/year*file*.txt.gz)
我有这样的目录结构:
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.gz
在 year1fileA.txt.gz
之前写入)
有没有办法使用 find
并在传递给 zcat
之前对这些文件进行排序?还是应该使用 for 循环?或 xargs
?
find
不会对其输出进行排序,但 glob 会。一次匹配所有文件的 glob 应该就足够了:
cmd <(zcat Y*/year*file*.txt.gz)