我们可以通过处理文件系统来合并二进制文件而不进行任何复制操作吗?

我们可以通过处理文件系统来合并二进制文件而不进行任何复制操作吗?

我想使用 shell 命令有效地合并二进制文件,我很快找到了像这样的经典方法:

cat file1 file2 > file3

不错,但是:

  1. 很慢。 IO访问速度慢。
  2. 它需要额外的空间。我不想复制文件。只需将它们连接起来即可。

文件系统非常适合处理文件碎片。我们不能使用这种机制来合并文件吗?

答案1

你可以这样做:

cat file2 file3 [...] filen >> file1

这会将file2, file3,...连接到就地filen末尾。file1>>操作符告诉 shell 写入文件末尾

您希望利用文件系统来“处理文件碎片”。不幸的是,没有任何通用的方法可以做到这一点。这是因为“文件系统”比磁盘上的文件系统更通用 - 例如,您有网络文件系统,保险丝,以及许多其他机制,可以让您公开任何类型的资源(不仅仅是块设备例如硬盘)作为文件系统层次结构。即使对于基于块设备的文件系统,也没有一个标准机制可以做到这一点,而且我也不知道任何特定于实现的机制。

答案2

list.txt将文件名按顺序放入名为“以换行符分隔”的文本文件中。然后在 bash 中运行:

while read line; do echo -n . ; dd if="$line" of=out status=none conv=notrunc oflag=append; done < list.txt

这将在当前目录中创建串联文件“out”。

答案3

    dd if=firstfile.raw > completedfile.raw
    dd if=nfile.raw    >> completedfile.raw
    dd if=lastfile.raw >> completedfile.raw

相关内容