您的位置:首页 > 其它

使用dd命令切割文件

2014-11-08 22:14 155 查看
看实验

为了验证切割后的有效性,创建了a.txt,b.txt 和一个10M的空文件然后压缩
[root@localhost test]# echo 1 >> a.txt
[root@localhost test]# echo 2 >> b.txt
[root@localhost test]# dd if=/dev/zero of=testfile bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.016804 seconds, 624 MB/s

[root@localhost test]# tar cvf test.tar.gz testfile a.txt b.txt
testfile
a.txt
b.txt
[root@localhost test]# ls
a.txt  b.txt  testfile  test.tar.gz
[root@localhost test]# rm -f a.txt b.txt testfile
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# du -h test.tar.gz
11M	test.tar.gz
[root@localhost test]# du test.tar.gz
10268	test.tar.gz
通过du命令查看文件大小为10268k,下面用dd切割为3份,5000+5000+268
[root@localhost test]# dd if=test.tar.gz of=test.tar.gz_1 bs=1k count=5000
5000+0 records in
5000+0 records out
5120000 bytes (5.1 MB) copied, 0.019158 seconds, 267 MB/s

注意这里skip=5000,意思就是说从第5000k开始写数据

[root@localhost test]# dd if=test.tar.gz of=test.tar.gz_2 bs=1k skip=5000 count=5000
5000+0 records in
5000+0 records out
5120000 bytes (5.1 MB) copied, 0.021693 seconds, 236 MB/s

因此这里就要从第10000k开始写数据,这里就不需要加count了读取到文件最后一个块

[root@localhost test]# dd if=test.tar.gz of=test.tar.gz_3 bs=1k skip=10000
250+0 records in
250+0 records out
256000 bytes (256 kB) copied, 0.000541 seconds, 473 MB/s

从ll命令可以看到3个文件大小和正好等于切割前的文件大小

[root@localhost test]# ll
总计 20548
-rw-r--r-- 1 root root 10496000 09-02 01:33 test.tar.gz
-rw-r--r-- 1 root root  5120000 09-02 01:35 test.tar.gz_1
-rw-r--r-- 1 root root  5120000 09-02 01:36 test.tar.gz_2
-rw-r--r-- 1 root root   256000 09-02 01:37 test.tar.gz_3


dd还原
[root@localhost test]# dd if=test.tar.gz_1 of=test_new.tar.gz
10000+0 records in
10000+0 records out
5120000 bytes (5.1 MB) copied, 0.037999 seconds, 135 MB/s

seek=5000 由于前面我们已经往test_new.tar.gz写入了5000k,因此我们需要从第5000k也就是第5000个块开始写

[root@localhost test]# dd if=test.tar.gz_2 of=test_new.tar.gz bs=1k seek=5000
5000+0 records in
5000+0 records out
5120000 bytes (5.1 MB) copied, 0.047617 seconds, 108 MB/s

前面已经写入了10000k,因此这里seek=10000

[root@localhost test]# dd if=test.tar.gz_3 of=test_new.tar.gz bs=1k seek=10000
250+0 records in
250+0 records out
256000 bytes (256 kB) copied, 0.001094 seconds, 234 MB/s


验证结果:
[root@localhost test]# ll
总计 30816
-rw-r--r-- 1 root root 10496000 09-02 01:50 test_new.tar.gz
-rw-r--r-- 1 root root 10496000 09-02 01:44 test.tar.gz
-rw-r--r-- 1 root root  5120000 09-02 01:44 test.tar.gz_1
-rw-r--r-- 1 root root  5120000 09-02 01:44 test.tar.gz_2
-rw-r--r-- 1 root root   256000 09-02 01:45 test.tar.gz_3

如果前面还原有问题这里解压将会报错。

[root@localhost test]# tar xvf test_new.tar.gz
testfile
a.txt
b.txt
[root@localhost test]# cat a.txt
1
[root@localhost test]# cat b.txt
2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  seek bs count 切割文件