10

我想连接我的文件。我用

cat *txt > newFile

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

argument list is too long.

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

谢谢

4

2 回答 2

15

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

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

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

这不是特别有效,某些版本的 find 允许您执行以下操作:

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

以提高效率。(注意前面的反斜杠+不是必需的,但我发现它与前面的例子很对称。)

于 2013-09-09T13:18:52.403 回答
4

如何在循环中执行它:

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

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

我建议以正确的顺序创建一个包含文件的文件,我不能 100% 确定使用这种通配符的保证(就像问题中一样)。

于 2013-09-09T09:24:03.163 回答