我有大量带有顺序文件名的小文件&我想用它创建一个单独的文件。最快的方法是什么?
e.g。
1.tgz.1 1.tgz.2 1.tgz.3 =========> 1.tgz
答案 0 :(得分:8)
您可以concatenate来自shell的文件。
在Windows中(二进制模式为/b
):
copy /b 1.tgz.1 + 1.tgz.2 + 1.tgz.3 1.tgz
在Unix / Linux中:
cat 1.tgz.1 1.tgz.2 1.tgz.3 > 1.tgz
答案 1 :(得分:2)
如果它是大个小文件,你不想乱搞大量的参数。
由于大多数UNIX shell按字母顺序展开通配符,因此您应该使用:
cat 1.tgz.? 1.tgz.?? 1.tgz.??? >1.tgz
假设包含100到999个文件,调整参数以处理更多或更少(例如,如果介于1,000和9,9999之间,则添加1.tgz。????)。你不会得到更好的性能,因为你的瓶颈是磁盘速度,它总是比CPU上运行的代码慢。
我能想到的唯一其他可能性是:
nice
提升您的优先级(有关详细信息,请参阅man nice
)。这将提高你获得更多CPU的能力,但如果你受到磁盘I / O的约束,这将无济于事。答案 2 :(得分:0)
这是bash(你的shell可能会有所不同):
for n in *.tgz.* ; do cat $n >> ${n/tgz.*/tgz} ; done
答案 3 :(得分:0)
使用具有高块大小的dd可能会获得更好的性能:
for n in *.tgz.* ; \
dd if="$n" conv=notrunc oflag=append bs=4M of="somefile.tgz" ; \
done