linux tar打包命令 vs cp

tar

参考:鸟哥的 Linux 私房菜 -- Linux 的文件压缩与打包 (vbird.org)

参考:- 如何复制文件在 linux 比 cp 更快和安全 - ZYLK

参考:使用tar代替cp进行拷贝 - 暗无天日 (lujun9972.win)

tar参数

选项与参数:
-c  :创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename)
-t  :察看打包文件的内容含有哪些文件名,重点在察看“文件名”就是了;
-x  :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
      特别留意的是, -c, -t, -x 不可同时出现在一串命令行中。


-z  :通过 gzip  的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
-j  :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
-J  :通过 xz    的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz
      特别留意, -z, -j, -J 不可以同时出现在一串命令行中


-v  :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的文件名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录    :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

其他后续练习会使用到的选项介绍:
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;(不建议用)
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!

tar基本命令

tar -zcvf xxx.tar.gz /xxx

解压xxx.tar.gz,会自动在当前目录创建一个xxx目录 

tar zxvf xxx.tar.gz

tar替代cp

cp命令的缺点:

  • cp命令会逐个读取文件,然后写入到新的位置,导致速度很慢;tar命令会尽可能多地读取文件内容,然后才成批写入新的位置。
  • 某些文件类型(例如链接文件)和权限,和被拷贝文件的创建日期等,cp命令不能很好的支持复制,此时tar的“ -p ”这个选项的就可以保存原本文件的权限与属性! 

至于cp命令为什么慢呢,可以看其他人的回答:

 参考:鸟哥书中关于tar模拟cp命令的疑问 - SegmentFault 思否

接下来,让我们实操用tar代替cp。

创建两个目录

xx@ubuntu022:~/test$ mkdir fwork1 fwork2 fwork1/dir1
xx@ubuntu022:~/test$ tree .
├── fwork1
│   └── dir1
└── fwork2

 将当前目录下的fwork1下的dir1 复制到fwork2下

(cd 备份资源原路径 ;sudo tar cvfp - 需要备份的文件目录或*(*代表资源路径下所有资源) )  | (cd 备份资源存储路径;sudo tar xvfp -)

 例如

(cd /test/fwork1 ;sudo tar cvfp - dir1 ) | (cd /test/fwork2 ;sudo  tar xvfp -)

通过标准输入输出的数据流重导向(standard input/standard output), 以及管线命令 (pipe) 的方式,将待处理的文件一边打包一边解压缩到目标目录去。也就是说第一个tar将文件打包后写入标准输出,然后通过管道传递给第二个tar,由第二个tar进行解压.

使用这种方式的好处除了可以保持文件的硬连接,创建时间,修改时间以及所有权

注意几点:

  • 打包时指定的目录如果是dir1, 那么解压后的目录也是dir1,打包时如果打包命令是fwork1/dir1,那么解压后包也会保存fowrk1,因此我们不能直接使用tar zcvfp - ./fwork1/dir1,正确的做法是先切到要打包的资源的上级目录,然后打包,例如我想把dir1复制一份到fwork2,那么首先切换到fwork1目录 
  • 先切换到目录,在打包,两个命令之间应该用’;‘,而不应该用’&‘,用’&‘会提示无法找到目录
  • tar命令后面的参数不需要带’-‘,如果加了就会报错
  • tar命令后面的参数不需要加’z',加了也会报错

此时,我们就将dir1从fwork1复制到fwork2了 

xx@ubuntu022:~/test$ tree
├── fwork1
│   └── dir1
└── fwork2
    └── dir1

当然我们也可以把目录复制到远程

tar -cvf - ./dir1 | ssh remote_host 'cd /opt ; tar xvfp -'

 这在没有rsync或scp时非常好用(不过这种情况应该很少见吧^_^).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值