我想连接我的文件。我用
cat *txt > newFile
但是我有将近 500000 个文件,它抱怨说
argument list is too long.
是否有一种有效且快速的方法来合并 50 万个文件?
谢谢
我想连接我的文件。我用
cat *txt > newFile
但是我有将近 500000 个文件,它抱怨说
argument list is too long.
是否有一种有效且快速的方法来合并 50 万个文件?
谢谢
如果您的目录结构很浅(没有子目录),那么您可以简单地执行以下操作:
find . -type f -exec cat {} \; > newFile
如果您有子目录,您可以将查找限制在顶层,或者您可以考虑将一些文件放在子目录中,这样您就不会遇到这个问题!
这不是特别有效,某些版本的 find 允许您执行以下操作:
find . -type f -exec cat {} \+ > newFile
以提高效率。(注意前面的反斜杠+
不是必需的,但我发现它与前面的例子很对称。)
如何在循环中执行它:
for a in *.txt ; do cat $a >> newFile ; done
这样做的缺点是cat
为每个文件生成一个新实例,这可能成本很高,但如果文件相当大,则 I/O 开销应该会超过生成新进程所需的 CPU 时间。
我建议以正确的顺序创建一个包含文件的文件,我不能 100% 确定使用这种通配符的保证(就像问题中一样)。