将大文件分解成小块

Ste*_*fan 71 command-line split

如何将一个+4GB的大文件分解为每个大约500MB 的较小文件。

以及如何重新组合它们以获取原始文件?

max*_*zig 85

您可以使用splitcat

例如类似的东西

$ split --bytes 500M --numeric-suffixes --suffix-length=3 foo foo.
Run Code Online (Sandbox Code Playgroud)

(其中输入文件名foo和最后一个参数是输出前缀)。这将创建文件,如foo.000 foo.001...

带有短选项的相同命令:

$ split -b 100k -d -a 3 foo foo
Run Code Online (Sandbox Code Playgroud)

如果您希望它在行边界而不是确切的字节数上拆分,您还可以指定“--line-bytes”。

要再次重新组装生成的部件,您可以使用例如:

$ cat foo.* > foo_2
Run Code Online (Sandbox Code Playgroud)

(假设 shell 对 shell globbing 的结果进行排序 - 并且部件的数量不超过系统相关的参数限制)

您可以通过以下方式比较结果:

$ cmp foo foo_2
$ echo $?
Run Code Online (Sandbox Code Playgroud)

(应该输出0)

或者,您可以使用 find/sort/xargs 的组合来重新组装这些部分:

$ find -maxdepth 1 -type f -name 'foo.*'  | sort | xargs cat > foo_3
Run Code Online (Sandbox Code Playgroud)

  • 组装时,我推荐 `cat foo.{000..NNN}`,其中 `NNN` 是最后一个预期的部分。这样,如果其中一块丢失,您会收到一条错误消息。但请注意,用于获取数字后缀的 `-d` 是特定于 GNU split 的;在其他平台上,您必须使用 `foo.aaa`、`foo.aab` 等。 (6认同)
  • 试试这个命令:`man split cat md5sum` (2认同)
  • 请记住,对于 `split`,KB = 1000、K = 1024、MB = 1000*1000、M = 1024*1024 等。 (2认同)