如何从命令行缩短文件?

如何从命令行缩短文件?

我有一个 150GB 的 xml 文件,我想将其缩短(即截断)到大约 1GB - 是否有一个可以使用的简单(bash 或类似的)命令,还是必须采用编程方式(即使在大型系统上,在 vi 或 emacs 中编辑它也是一场噩梦)?

(我并不特别担心信息的丢失,我想要一个更短的文件,这样我就可以用它来测试软件,而不用等待几个小时才能得到答案,一个更短的文件可以让我做到这一点。)

答案1

假设您想要截断并提取 150 GB 文件中的前 1 GB:

head

head -c 1G infile > outfile

请注意,G后缀可以替换为,GB以对齐到 1000 而不是 1024。

或者dd

dd if=infile of=outfile bs=1M count=1024

或者像 Wumpus Q. Wumbley 的回答那样,dd可以就地截断。

答案2

要将文件截断为 1 GB,请使用以下truncate命令:

truncate -s 1G file.xml

截断的结果可能不是一个有效的 XML 文件,但我知道您明白这一点。

GNU 版本的文档truncate这里BSD 版本的文档是这里

答案3

如果可能,我会使用truncateJohn1024 的回答中的命令。不过,这不是标准的 unix 命令,所以有一天你可能会发现自己无法使用它。在这种情况下,dd也可以进行就地截断。

dd的默认行为是在复制结束的位置截断输出文件,因此您只需给它一个长度为 0 的输入文件并告诉它从所需的截断点开始写入:

dd if=/dev/null of=filename bs=1048576 seek=1024

dd(这与multithr3at3d 的答案中的复制和截断不同。)

请注意,我使用了 1048576 和 1024,因为 1048576*1024 是所需大小。我避免使用 bs=1m,因为这是一个“可移植性”答案,而 classicdd只知道后缀kbw

答案4

您可以使用该split命令。

split -C 1G <filename>

欲了解更多详情,请查看stackoverflow 答案

相关内容