在 Linux 中追加与连接大文件
Appending vs. Concatenating Large Files in Linux
假设我有 5 个非常大的 100GB 文件。
file1
file2
file3
file4
file5
如果我想把它们组合成fileAll
,下面两种方式有速度(read/write)的区别吗? (让我们暂时忽略工作磁盘 space)
猫和重定向:
cat file1 file2 file3 file4 file5 > fileAll
目录、追加和move/rename:
cat file2 file3 file4 file5 >> file1
mv file1 fileAll
我的假设:
我假设 cat
将完全读取每个文件,它正在连接(在这个例子中总共 500GB 值得阅读)然后重定向 >
将写出所有内容(总共 500GB 值得阅读)写作)。
在第二个例子中,我假设 cat
将少读取一个文件(总共 400GB 的阅读价值),然后在附加 >>
时只需将其写在 space 在我们附加到的文件之后(总共 400GB 的写入价值)。
我假设 appending 不必读入被附加到的整个文件并且可以简单地在该文件的末尾开始写入,我是否正确?
你的假设是正确的。 "appending" 只需要一次 "seek" 调用文件结尾。在情况 2 中,不会从文件 1 中读取任何内容。
假设我有 5 个非常大的 100GB 文件。
file1
file2
file3
file4
file5
如果我想把它们组合成fileAll
,下面两种方式有速度(read/write)的区别吗? (让我们暂时忽略工作磁盘 space)
猫和重定向:
cat file1 file2 file3 file4 file5 > fileAll
目录、追加和move/rename:
cat file2 file3 file4 file5 >> file1
mv file1 fileAll
我的假设:
我假设 cat
将完全读取每个文件,它正在连接(在这个例子中总共 500GB 值得阅读)然后重定向 >
将写出所有内容(总共 500GB 值得阅读)写作)。
在第二个例子中,我假设 cat
将少读取一个文件(总共 400GB 的阅读价值),然后在附加 >>
时只需将其写在 space 在我们附加到的文件之后(总共 400GB 的写入价值)。
我假设 appending 不必读入被附加到的整个文件并且可以简单地在该文件的末尾开始写入,我是否正确?
你的假设是正确的。 "appending" 只需要一次 "seek" 调用文件结尾。在情况 2 中,不会从文件 1 中读取任何内容。