合并目录中所有文件夹中的所有文件

时间:2014-10-22 17:18:49

标签: bash

所以我有一个名为Genomes的文件夹,在这个文件夹中我有3000个文件夹,里面都有1个文件。我想将所有这些文件合并到一个大文件中。我认为应该有一种方法在bash中这样做,但我不确定如何去做。

2 个答案:

答案 0 :(得分:2)

(
cd Genomes
cat */* > ../Genomes-combined-data
)

这会创建与Genomes目录相同级别的单个文件,其中包含所有文件的串联。

唯一的问题可能是参数列表的长度。如果这是一个问题,那么(假设Genomes目录中没有文件 - 只有目录):

find Genomes -type f -exec cat {} + > Genomes-combined-data

这使用find来确定名称并将列表拆分为可管理的块。最终结果基本相同,因为您将拥有一个包含以前在3000个单独文件中的所有数据的文件。但是,正如Michał Górnycomment指出的那样,与使用*/*相比,文件中数据的顺序可能会有所不同。如有必要,您可以find ... -print0sort -z用管道传输到xargs -0 catfind Genomes -type f -print0 | sort -z | xargs -0 cat > Genomes-combined-data 来管理名称中的任何空格或换行符。所有这些都不是POSIX工具的完全标准扩展。

find Genomes -type f -print | sort | xargs cat > Genomes-combined-data

如果您知道自己有合理的名字,可以直接使用:

find

您可以根据需要使排序标准变得复杂。

当然,您可以将输出文件放在任何方便的位置。不要将输出文件放在{{1}}找到它的地方 - 这将导致一个完整的磁盘,除非你非常幸运。

答案 1 :(得分:0)

这里是一个单行程序,它将对所有文件名进行排序,并将其内容连接到一个文件(Genomes-all)中,每个文件都有一个标题,表示其名称:

(find Genomes -type f | sort | xargs tail -n +1) > Genomes-all