我有一个150GB的xml文件,我想将其缩短(即截断)到大约1GB-我可以使用一个简单的命令(重击或类似命令),还是必须走程序化路线(在vi或emacs中对其进行编辑)即使在大型铁系统上也是一场噩梦吗?
(我并不特别担心信息的丢失,我想要一个较短的文件,以便可以在此上测试一个软件,而不必等待很长时间才能得到答案,较短的文件可以使我做到这一点。)
我有一个150GB的xml文件,我想将其缩短(即截断)到大约1GB-我可以使用一个简单的命令(重击或类似命令),还是必须走程序化路线(在vi或emacs中对其进行编辑)即使在大型铁系统上也是一场噩梦吗?
(我并不特别担心信息的丢失,我想要一个较短的文件,以便可以在此上测试一个软件,而不必等待很长时间才能得到答案,较短的文件可以使我做到这一点。)
Answers:
假设您要截断并提取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
可以截断到位。
在可能的情况下,我将truncate
按照John1024的答案使用该命令。但是,它不是标准的Unix命令,因此您可能有一天会发现自己无法使用它。在这种情况下,dd
也可以执行原位截断。
dd
的默认行为是在复制结束的位置截断输出文件,因此您只给它一个长度为0的输入文件,并告诉它在所需的截断点处开始写入:
dd if=/dev/null of=filename bs=1048576 seek=1024
(这与dd
multithr3at3d答案中的“复制并截断”不同。)
请注意,我使用了1048576和1024,因为1048576 * 1024是所需的大小。我避免BS =1米因为这是一个“便携性”的答案,经典dd
只知道后缀k
,b
和w
。
bs
数字乘以seek
数字就是要保留的字节数。满足该约束的任何两个数字都应该起作用;例如bs=1073741824 seek=1
或bs=1 seek=1073741824
。或者,由于bs
默认值为512,因此seek=2097152
单独使用也应该有效。你也可以使用符号一样1M
,1K
,1G
和2M
。
我不确定您要问什么。您是否只想摆脱其他149GB,还是要将150GB压缩为1GB?无论如何,这可能是完成此操作的有用方法。
该split
命令可以将任何文件分割成多个部分。见男人分裂。您可以使用该-b
选项指定要分割成的文件块的大小。例如:
$ split -b 1GB myfile.xml
如果没有其他选择,则应在当前目录中以字母开头创建多个文件x
。如果要调整拆分文件的名称,请参考手册页。
要重新组装文件,只需使用cat * > re-assembled.xml
。
例:
[kent_x86.py@c7 split-test]$ ls -l opendocman*
-rw-rw-r--. 1 kent_x86.py kent_x86.py 2082602 Mar 31 2017 opendocman-1.3.5.tar.gz
[kent_x86.py@c7 split-test]$ split -b 100K opendocman-1.3.5.tar.gz
[kent_x86.py@c7 split-test]$ ls
opendocman-1.3.5.tar.gz xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar xas xat xau
[kent_x86.py@c7 split-test]$ ll
total 4072
-rw-rw-r--. 1 kent_x86.py kent_x86.py 2082602 Jan 5 11:06 opendocman-1.3.5.tar.gz
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xaa
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xab
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xac
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xad
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xae
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xaf
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xag
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xah
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xai
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xaj
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xak
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xal
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xam
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xan
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xao
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xap
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xaq
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xar
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xas
-rw-rw-r--. 1 kent_x86.py kent_x86.py 102400 Jan 5 11:06 xat
-rw-rw-r--. 1 kent_x86.py kent_x86.py 34602 Jan 5 11:06 xau
[kent_x86.py@c7 split-test]$ cat xa* > opendoc-reassembled.tar.gz
[kent_x86.py@c7 split-test]$ ls -l opendoc-reassembled*
-rw-rw-r--. 1 kent_x86.py kent_x86.py 2082602 Jan 5 11:07 opendoc-reassembled.tar.gz