使用find和cpio来备份或拷贝目录
如果要备份某个目录,但是该目录下的有些文件或子目录又不想备份,则可以使用find配合cpio的方式来备份。
这个脚本前面为备份mysql,只保留3天的全备份,后面为目录备份,也只保留3天的。
注意find命令的参数:
cd /data/ 表示进入该目录去备份其下的子目录。
find ./wildfly-10.1.0.Final 表示这个wildfly-10.1.0.Final这个目录会被备份,并且会保留该目录名到备份目录下。
-regextype 表示正则表达式类型。
posix-egrep 表示为egrep所使用的扩展正则表达式。
-mindepth 1 表示find的输出除目录本身外的所有目录深度。
! -regex 表示过滤文件或目录所用的正则表达式,可以多个,前面的!表示不包含该表示式对应的文件或目录。
注意cpio命令的参数:
a 表示不更新文件的访问时间
d 表示自动创建目录
m 表示保留文件的修改时间
v 表示输出执行信息(放到crontab时可去掉)
p 表示工作在copy-pass模式,专门用来拷贝目录树的方式。
脚本如下:
#!/bin/env bash
mysqldump -P3306 -uroot -pxxxxx –skip-opt –create-options –add-drop-database –add-drop-table –add-locks –quick –lock-tables=0 –set-charset –flush-privileges –flush-logs –default-character-set=utf8 –all-databases > /BACKUP/mysqldump_`date +%F`.sql
if [ $? -eq 0 ];then
rm -rf /BACKUP/mysqldump_`date +%F -d ‘3 days ago’`.sql
fi
mkdir -p /BACKUP/wildfly_DATA-bak_`date +%F`
cd /data/
find ./wildfly-10.1.0.Final -regextype posix-egrep -mindepth 1 ! -regex ‘\./wildfly-10\.1\.0\.Final/standalone/log/.*’ ! -name server.log.* ! -name access.log.* | cpio -admvp /BACKUP/wildfly_DATA-bak_`date +%F`/
#cp -rf /data/wildfly-10.1.0.Final /BACKUP/wildfly_DATA-bak_`date +%F`/
if [ $? -eq 0 ];then
rm -rf /BACKUP/wildfly_DATA-bak_`date +%F -d ‘3 days ago’`
fi