Xiaopei's DokuWiki

These are the good times in your life,
so put on a smile and it'll be alright

User Tools

Site Tools


it:linux:compress

压缩与打包

gzip & bzip2

  1. 要求快速压缩的话就用 gzip
  2. 需要高压缩比,而不在乎时间的化就用 bzip2
  3. 若要在网络传输大文件, 高压缩比的 bzip2 更适合
  4. 但以上只适用于文本文件
  5. 图像的话两种方法压缩比类似, 应该用更快速的 gzip

tar

-C, --directory DIR : change to directory DIR

  • 压缩时避免 tar: Removing leading `/' from member names 问题
# 1
$ tar zcf sites.tgz -C /var/www/ *
# 2
$ tar zcf backup.tgz -C /var/lib/some/application/ data/ -C /tmp/ dump.sql
  • 解压到指定目录
$ tar -jxv -f /root/etc.tar.bz2 -C /tmp
  • 解压包中的指定文件到指定目录
$ tar zxf foo.tgz -C to_this_dir  target_file

参考

仅解开单一文件的方法

# 1. 先找到我们要的档名,假设解开 shadow 文件好了:
$ tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
-r-------- root/root  1230 2008-09-29 02:21:20 etc/shadow-
-r-------- root/root   622 2008-09-29 02:21:20 etc/gshadow-
-r-------- root/root   636 2008-09-29 02:21:25 etc/gshadow
-r-------- root/root  1257 2008-09-29 02:21:25 etc/shadow  <==这是我们要的!
 
# 2. 将该文件解开!作法如下:
$ tar -jxv -f /root/etc.tar.bz2 etc/shadow
etc/shadow
$ ll etc
total 8
-r-------- 1 root root 1257 Sep 29 02:21 shadow  <==呦喝!只有一个文件啦!
# 很有趣!此时只会解开一个文件而已!不过,重点是那个档名!你要找到正确的档名。
# 在本例中,你不能写成 /etc/shadow !因为记录在 etc.tar.bz2 内的档名之故!

参考

使用 tar 做增量备份

tar 有三种(或以上)方式可做增量备份

  • -g, –listed-incremental FILE: 依 snapshot 执行完整或增量备份
  • -u, –update: 不断更新同一 tar 文件
  • -N, –newer, –after-date DATE-OR-FILE: 只对在给定时间(或文件)后修改过或新建的文件打包, 另有 –newer-mtime=DATE 仅判断修改过的而忽略新建的文件

-g 方法

同一批备份应使用统一 snapshot, 新一批备份可删除/转移原 snapshot 后开始.

  • 完整备份
tar -g $BAK_BASE/$SNAPSHOT -zcf $BAK_BASE/$FULL_BAK $SRC
  • 增量备份
tar -g $BAK_BASE/$SNAPSHOT -zcf $BAK_BASE/$INC_BAK $SRC

参考

其他压缩工具

7z

$ sudo apt-get install p7zip
 
# Extracting
$ p7zip -d filename.7z
it/linux/compress.txt · Last modified: 2013/08/19 07:22 (external edit)