Linux下使用Bash脚本备份并打包文件夹
2017-11-07 11:31 浏览(1913

最近在更新博客代码的时候,总会一不小心把本地的一些配置或是本地才用的参数传到线上去(有时更新代码太多,git打包后也不会一一去看)。上传后发现有问题,但是本地又没有线上的配置备份。这下就呵呵了。

今天写了个bash脚本测了一下,还行。

测试目录

/mnt/hgfs/www/t

t文件夹目录结构

.
├── backup
│   ├── b
│   ├── simp.css
│   └── t
│       ├── bb
│       └── test.txt
├── index.html
├── jquery.min.js
└── nobackup
    ├── q
    │   └── x.txt
    └── web.css


bash文件(backup.sh)

#!/bin/bash
#要备份的目录位置(不包含该目录)
backupPath=/mnt/hgfs/www
#备份的目录名称
backupFileName=t
#不备份的目录名称(或文件)
noBackupFileNameArr=("nobackup" "backup/t/bb" "backup/b" "backup/t/test.txt")
#保存位置
savePath=/root
#保存的包名,名称 如:2017-11-07-jam00.tar.gz
saveName=$(date +%Y-%m-%d)-jam00.tar.gz

#===================以下勿改=========================
pathStr=""
for v in ${noBackupFileNameArr[@]}; do
    pathStr="$pathStr --exclude=$backupFileName/$v";
done

#只保留最近七天的备份
oldBackup=$savePath/$(date -d "7 days ago" +'%Y-%m-%d')-jam00.tar.gz
rm -f $oldBackup
cd $backupPath
tar $pathStr -zcf $savePath/$saveName $backupFileName

注释已经很详细了,这里说明下 noBackupFileNameArr 这个参数

这是不备份的文件夹和文件,可用于缓存目录,运行日志之类的文件夹

nobackup,backup/t/bb,backup/b,backup/t/test.txt

都是在文件夹 t 下面的,要写好完整的路径,用双引号包裹,且用空格隔开


运行 backup.sh (记得添加运权限 -- chmod +x )

在/root下生成了一个打包文件 2017-11-07-jam00.tar.gz ,解压后查看目录结构

.
├── backup
│   ├── simp.css
│   └── t
├── index.html
└── jquery.min.js

所列的不备份文件和文件夹都没备份,ok


评论(0)
发布评论
回复X
聊天室(0