linux下tar命令的奇葩用法(可用来保留目录修改时间的复制整个目录)

linux下tar命令的奇葩用法:
tar -cvf - /etc | tar -xvf -

其中 /etc 可以改成任何需要备份的目录
以前在鸟哥linux里 http://linux.vbird.org/linux_basic/0240tarcompress.php#tar 见到的,当时不知道有什么用:这不就是cp -r,干吗写这么啰嗦。原来它可“原封不动”的备份,包括文件目录的修改时间;cp -r复制出来的目录修改时间是当前时间。要将一个目录复制一下,可又想保留目录修改时间(这是时间非常有用),之前是tar打包的,用的时候再解开(或当场就解开,并删除tar包);突然意识到,tar的这个奇葩用户正是所需!

 

一个使用tar实现对目录作增量备份的bash脚本

一个使用tar实现对目录作增量备份的bash脚本

#!/bin/bash
#program:
#  auto backup the folder $to_backup
#        to $save_to
#  History:
# 2012/11/28  yqf First release

# do NOT change the variable $filename
#  except you REALY know what you are doing exactly
filename=`date +%Y%m%d_%H%M%S`

# sample
# ##whitch folder you want to backup, full path (start with "/")
#to_backup="/var/www/html/foo"
# ##where you whant to save the backup files,folder, MUST end by "/"
#save_to="/var/www/backup/foo/"
# ##the incremental file, file name, full path
#incremental_file="/var/www/backup/incremental_file/foo.incre"
#
#tar -g $incremental_file \
# ## each files or folders that no need to backup, (ingore),
# ##    [Careful] without end slash even folder
#  -C $to_backup \
#  --exclude data/cache \
#  --exclude data/tmp \
#  -cpjf $save_to$filename.tar.bz2 .
# sample end
#
# mysite.com
to_backup="/var/www/html/mysite/html/"
save_to="/home/myhome/backup/mysite/"
incremental_file="/home/myhome/backup/incremenntal_list/mysite.increment_file"

tar -g $incremental_file \
  -C $to_backup \
  --exclude data/static_cache \
  --exclude data/templates_c \
  --exclude data/templates_cache \
  --exclude data/cache \
  -cpjf $save_to$filename.tar.bz2 .

下载脚本附件 tar_incremental_backup_sample
其中....似乎很简单,不用说什么了

tar 打包备份目录时分卷打包压缩(增量备份,并自动分割成多个文件)

tar 增量备份打包目录,并分卷打包压缩(自动分割成多个文件)

tar -g /home/my_name/backup/incremenntal_list/my_website.incremenntal_list \
  -C /var/www/html/ \
  --exclude data/cache \
  --exclude data/tmp \
  -cpjvf - /var/www/html/ |split -b 2g

-g xxx  是增量日志文件,再次执行上面命令备份目录时,没有改变的文件将不备份,这样节省备份占用硬盘;需要还原时,同样要带上该参数,后边跟上该文件路径,而且要按备份的次序一个一个解包

--exclude xxx 是排除的目录,被tar忽略而不备份

split -b 2g 分割为2G的文件,分割文件名字将是 xaa, xab, xac ...

备份文件还原时,使用以下命令:

cat xaa xab xac >tar -xj

注意,1)省略了上述-g 参数,如果备份时用了这里就要带上。

2)假设只有三个分卷文件,如果不止三个,那就依次写出即可。事实上 cat  `ls x*` >tar -xj 也可以,但如果`ls x*`出来的次序是乱的,那就要解包失败。

linux下使用tar差异化备份目录

tar命令的参数 -g, 后面跟一个文件路径,就可在该文件里记录下差异化日志记录,每次备份时带上该参数及文件路径,即是差异备份。还原时,也应该带上这个参数,否则,每次差异备份时删除的文件将不会自动删除。

tar命令的参数 --exclude=,后面跟一个文件路径(支持通配符),指备份时忽略指定的文件(包括目录),如有多个忽略文件,那就加多次该参数,每次指定一个忽略目录。

tar命令的-p参数,指打包时保留文件权限

需要还原文件时,就按备份的次序依次执行-x解包时,记得要带上-g参数,别忘了后面的差异化日志记录文件,这样每次备份时删除的文件也会自动在还原的目标目录里删除;当然你想保留所有文件时另说。