tar分包压缩与合并
⽬标-(标准)
如何将⽂件打包、压缩并分割成制定⼤⼩?
⽇期: August 28 ⽇, Saturday@ 01:37:03
主题 Shell 编程和⼯具
天龙八部哪个门派厉害(如何在linux下实现Windows中winrar和winzip等压缩软件所提供的打包压缩分割功能)
将⼤⽂件或⽬录打包、压缩并分割成制定⼤⼩的⽂件,这在将数据备份到容量有限的移动储存设备时是必须的,在Linux下可以通过组合使⽤ tar,bzip2(或者gzip),split命令来实现。
案例-(故事)
假设要将下⾯这个⽂件压缩并分割成多个1.4M的⽂件
-r-xr-xr-x 1 root root 4.4M 2004-08-27 01:50 a.chm
可以⽤下⾯的命令:
tar -jcf - a.chm | split -b 1400k - a.chm.tar.bz2.
完成后会⽣产下⾯的⽂件:
-rw-r--r-- 1 root root 1433600 2004-08-27 01:55 a.chm.tar.bz2.aa
-rw-r--r-- 1 root root 1433600 2004-08-27 01:56 a.chm.tar.bz2.ab
-rw-r--r-- 1 root root 1433600 2004-08-27 01:56 a.chm.tar.bz2.ac
-rw-r--r-- 1 root root 225280 2004-08-27 01:56 a.chm.tar.bz2.ad
还原⽂件⽤下⾯的命令:
cat a.chm.tar.bz2.a* | tar -jx
实现-怎么做(细节)
为了让⼴⼤菜鸟了解上⾯的命令,现解释如下:
压缩命令"tar -jcf -" 中的 “-jcf" 参数是创建(c)⽂件(f)并调⽤bzip2进⾏压缩(j),跟在f后⾯的" -"是将所创
建的⽂件输出到标准输出上,在这⾥就是通过"|"管道输出给 split 命令进⾏⽂件分割;分割命令"split -b 1400k - a.chm.tar.bz2." 中的 "-b 1400k" 是⽤来设置每个⽂件⼤⼩的,除了"k",还可以⽤"m"来作为单位,接着的" - "就是将"tar"命令通过管道传⼊的数据作为需要分割的数据来源,后⾯跟着的"水果美容护肤小窍门
a.chm.tar.bz2."就是⽂件名了。
这两个命令如果独⽴使⽤,可以将参数中独⽴的" - "换为具体的⽂件名,这样"tar"命令就可以将⽂件打包压缩成指定的⽂件,⽽"split"命令就可以分割指定的⽂件。
在"tar"命令中,⼤家也可以⽤"z"代替"j"参,这样tar就会调⽤gzip进⾏压缩,⽽不是bzip2,当然,如果你⽤了"z"参数,记得将输出的⽂件名中的"bz2"改为"gz",这样在解压的时候就可以分辨出需要⽤那个参数进⾏解压。
⽤split命令⽣产的⽂件序列除了字母还可以使⽤" -d "参数指定为数字的形式,同时还可以通过" -a x"来设定序列的长度(默认值是2),例如命令:
split -b 1400k -d -a 1 - a.chm.tar.bz2.
就可以产⽣如下命名规则的⽂件:
-rw-r--r-- 1 root root 1.4M 2004-08-28 01:01 a.chm.tar.bz2.0
-rw-r--r-- 1 root root 1.4M 2004-08-28 01:02 a.chm.tar.bz2.1
-rw-r--r-- 1 root root 1.4M 2004-08-28 01:02 a.chm.tar.bz2.2
-rw-r--r-- 1 root root 220K 2004-08-28 01:02 a.chm.tar.bz2.3
如果⼤家想更全⾯地了解这些命令,可以通过 "man 命令" 来查阅他们的⼿册。
实践
好听的游戏名字男⾃我反省-(反馈分析)-差距
================================
xiongmc@xiongmc:~/project/pad$ tar -jcf - Pad/ | split -b 500000 - pad.tar.bz2.
split: 已排除输出⽂件后缀
xiongmc@xiongmc:~/project/pad$ tar -jcf - Pad/ | split -m 500 - pad.tar.bz2.
split:⽆效选项 -- m
请尝试执⾏"split --help"来获取更多信息。
xiongmc@xiongmc:~/project/pad$ tar -jcf - Pad/ | split -M 500 - pad.tar.bz2.
split:⽆效选项 -- M
++只是认准 第⼀个参数的问题,没考虑 500的问题。所以要搞清楚问题是什么?再专业⼈⼠去解决。
结论-继续学习:
⾃⼰没有问,为什么是这个问题。⼀直就认为是这个的问题。尝试了多次后,发现还是⽆法解决,这个时候情绪就来了,相反我们应该像《穷爸爸,富爸爸》说的:“停下你⼿头的活⼉,也就是说,先停下来,评估⼀下你正在做的事情中什么是有效的,什么是⽆效的。神志不清就是指做同⼀件事情却希望有不同的结果----结果或许是由于多个⽅⾯的原因导致的。不要做哪些⽆效的事情,⼀些有效的事情去做。”
具体就是不是“-b” 的问题, ⾃⼰臆想的认为是。但是没有考虑是 500 的问题,因为尝试修改“-b” 改为 “-m” 未成功。然⽽你没有去怀疑 500,因为你固执,偏见,缺乏变通的思维。所以我们在动⼿前先问题是什么问题,然后
专业⼈⼠去解决。
请尝试执⾏"split --help"来获取更多信息。
xiongmc@xiongmc:~/project/pad$ tar -jcf - Pad/ | split -m 500m - pad.tar.bz2.
split:⽆效选项 -- m
请尝试执⾏"split --help"来获取更多信息。
xiongmc@xiongmc:~/project/pad$ tar -jcf - Pad/ | split -b 500m - pad.tar.bz2.
xiongmc@xiongmc:~/project/pad/test$ ll
总⽤量 4870924
引号有哪些作用drwxrwxr-x 2 xiongmc xiongmc 4096 4⽉ 12 19:05 ./
drwxrwxr-x 4 xiongmc xiongmc 32768 4⽉ 12 19:05 ../
-rw-rw-r-- 1 xiongmc xiongmc 524288000 4⽉ 12 18:47 pad.tar.bz2.aa
-
rw-rw-r-- 1 xiongmc xiongmc 524288000 4⽉ 12 18:51 pad.tar.bz2.ab
-rw-rw-r-- 1 xiongmc xiongmc 524288000 4⽉ 12 18:52 pad.tar.bz2.ac
-rw-rw-r-- 1 xiongmc xiongmc 524288000 4⽉ 12 18:54 pad.tar.bz2.ad
-rw-rw-r-- 1 xiongmc xiongmc 524288000 4⽉ 12 18:55 pad.tar.bz2.ae
-rw-rw-r-- 1 xiongmc xiongmc 524288000 4⽉ 12 18:56 pad.tar.bz2.af
-rw-rw-r-- 1 xiongmc xiongmc 524288000 4⽉ 12 18:58 pad.tar.bz2.ag
-rw-rw-r-- 1 xiongmc xiongmc 524288000 4⽉ 12 19:00 pad.tar.bz2.ah
-rw-rw-r-- 1 xiongmc xiongmc 524288000 4⽉ 12 19:03 pad.tar.bz2.ai
-rw-rw-r-- 1 xiongmc xiongmc 269156352 4⽉ 12 19:05 pad.tar.bz2.aj
解压
xiongmc@xiongmc:~/project/pad/test$ cat pad.tar.bz2.a* | tar -jx
================================
2》
要将⽬录logs打包压缩并分割成多个1M的⽂件,可以⽤下⾯的命令:
tar cjf - logs/ |split -b 1m - logs.tar.bz2.
艸芔茻完成后会产⽣下列⽂件:
logs.tar.bz2.aa, logs.tar.bz2.ab, logs.tar.bz2.ac
母亲节快乐贺卡要解压的时候只要执⾏下⾯的命令就可以了:
cat logs.tar.bz2.a* | tar xj
再举例:
要将⽂件test.pdf分包压缩成500 bytes的⽂件:
tar czf - test.pdf | split -b 500 -
最后要提醒但是那两个"-"不要漏了,那是tar的ouput和split的input的参数。
gzcat sxrt5.0.a[a-c]|tar xvf -
1、合并使⽤spilt分割的⽂件
# cat sxrt5.0.aa sxrt5.0.ab sxrt5.0.ac >>sxrt5.0. 2、解压gz⽂件
# gunzip sxrt5.0.
3、解tar包
# tar xvf sxrt5.0.dvd1.tar
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论