组装文件的最佳方式

时间:2009-02-12 09:07:11

标签: shell file

我有大量带有顺序文件名的小文件&我想用它创建一个单独的文件。最快的方法是什么?

e.g。

1.tgz.1  1.tgz.2  1.tgz.3   =========> 1.tgz

4 个答案:

答案 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上运行的代码慢。

我能想到的唯一其他可能性是:

  • 在单独的物理磁盘上创建1.tgz。这可能会为您提供交叉磁盘访问的优势。
  • 以root身份运行并使用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