Linux定时备份:修订间差异

Admin留言 | 贡献
创建页面,内容为“<pre> #!/bin/bash #参数设定 basedir=/www/backup #备份存放的目录 days=5 #备份在本地保留天数 bakfiles="/www/docker" #需要备份的目录或文件,请不要使用快捷方式或通配符 echo ===================================================== date cd $basedir #删除备份目录中15天以前备份文件,不包含子目录 find -maxdepth 1 -name "*.tgz" -mtime +"$days" -exec rm -f {…”
 
Admin留言 | 贡献
无编辑摘要
 
(未显示同一用户的2个中间版本)
第1行: 第1行:
<pre>
<syntaxhighlight lang="bash" line="1">
#!/bin/bash
#!/bin/bash


#参数设定
# 参数设定


basedir=/www/backup               #备份存放的目录
# WebDAV 服务器的 URL 和认证信息
webdav_url="https://file.raf.cc/dav/onedrive/backup/raf.cc"
webdav_user="admin"
webdav_pass="ksqqlsx1073"
# 备份存放的目录
basedir=/data/backup


days=5                          #备份在本地保留天数
# 要保留的最大天数
max_days=30


bakfiles="/www/docker"     #需要备份的目录或文件,请不要使用快捷方式或通配符
# 需要备份的目录或文件 使用空格分开
bakfiles="/data/docker/"
 
# 获取当前日期的时间戳
current_time=$(date +%s)
 
# 指定备份文件的名称,精确到秒
backup_file="backup_$(date +%Y%m%d)_$current_time.tgz"


echo =====================================================
echo =====================================================


date
date '+%D %T'


cd $basedir
cd $basedir


#删除备份目录中15天以前备份文件,不包含子目录
# 删除备份目录中 $days 天以前备份文件,不包含子目录
 
find -maxdepth 1 -name "*.tgz" -mtime +"$max_days" -exec rm -f {} \;
find -maxdepth 1 -name "*.tgz" -mtime +"$days" -exec rm -f {} \;
 
for bakfile in $bakfiles
 
do
 
file=`basename $bakfile`


#压缩打包需要备份的目录,包括权限,文件命名包含当前时间
# 创建一个新的备份文件,并将所有需要备份的目录和文件都添加到其中
tar -czpf "$basedir/$backup_file" $bakfiles


tar -czpf "$file"_$(date +%Y%m%d-%H%M).tgz $bakfile
# 大文件打包前后,缓解磁盘压力,降低I/O错误概率
sleep 2s ;sync;sync


#大文件打包前后,缓解磁盘压力,降低I/O错误概率
echo "Backup completed: $backup_file"


sleep 10s ;sync;sync


# 列出 WebDAV 目录中的所有文件
file_list=$(curl -s -u "$webdav_user:$webdav_pass" -X PROPFIND "$webdav_url" | grep -oP '<D:displayname>\K[^<]+' | sed '1d')
# 循环遍历文件列表
for file in $file_list; do
  echo "checking file:$file"
  # 获取文件的修改日期
  modified_timestamp=$(echo $file|awk -F'[_.]' '{print $3}')
  echo "modified_timestamp=$modified_timestamp"
  # 计算文件存在的天数
  days_diff=$(( (current_time - modified_timestamp) / 86400 ))
  echo "days_diff=$days_diff"
  # 如果文件存在的天数超过最大天数,就删除文件
  if [ "$days_diff" -gt "$max_days" ]; then
    echo "Deleting $file (modified on $modified_time)"
    curl -u "$webdav_user:$webdav_pass" -X DELETE "$webdav_url/$file"
  fi
done
done


</pre>
echo "$(date '+%D %T'): start upload..."
curl -# -u "$webdav_user:$webdav_pass" -T $backup_file "$webdav_url/$backup_file"
echo "$(date '+%D %T'): Upload completed: $backup_file"
</syntaxhighlight>
[[分类:Linux]]