我想连接我的文件。我用
cat *txt > newFile
但是我有近500000个文件,它抱怨
argument list is too long.
是否有一种有效且快速的方法来合并50万个文件?
由于
答案 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(和问题一样)。