如何连接大量的文件

时间:2013-09-09 09:20:10

标签: unix concatenation cat

我想连接我的文件。我用

cat *txt > newFile

但是我有近500000个文件,它抱怨

argument list is too long.

是否有一种有效且快速的方法来合并50万个文件?

由于

2 个答案:

答案 0 :(得分:12)

如果您的目录结构很浅(没有子目录),那么您只需执行以下操作:

find . -type f -exec cat {} \; > newFile

如果您有子目录,可以将查找限制在顶层,或者您可以考虑将一些文件放在子目录中,这样就不会出现此问题!

这不是特别有效,并且某些版本的find允许您这样做:

find . -type f -exec cat {} \+ > newFile

提高效率。 (注意+之前没有必要使用反斜杠,但我发现前面的例子对称性很好。)

答案 1 :(得分:3)

如何在循环中完成:

for a in *.txt ; do cat $a >> newFile ; done

这样做的缺点是为每个文件生成一个新的cat实例,这可能代价很高,但是如果文件相当大,那么I / O开销应该超过生成新进程所需的CPU时间。

我建议按照正确的顺序创建一个包含文件的文件,我不是100%肯定使用像这样的globbing(和问题一样)。