Linux定时备份:修订间差异
无编辑摘要 |
无编辑摘要 |
||
| (未显示同一用户的1个中间版本) | |||
| 第2行: | 第2行: | ||
#!/bin/bash | #!/bin/bash | ||
#参数设定 | # 参数设定 | ||
# WebDAV 服务器的 URL 和认证信息 | |||
webdav_url="https://file.raf.cc/dav/onedrive/backup/raf.cc" | |||
webdav_user="admin" | |||
webdav_pass="ksqqlsx1073" | |||
# 备份存放的目录 | |||
basedir=/data/backup | |||
# 要保留的最大天数 | |||
max_days=30 | |||
bakfiles="/ | # 需要备份的目录或文件 使用空格分开 | ||
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 | ||
# | # 删除备份目录中 $days 天以前备份文件,不包含子目录 | ||
find -maxdepth 1 -name "*.tgz" -mtime +"$max_days" -exec rm -f {} \; | |||
find -maxdepth 1 -name "*.tgz" -mtime +"$ | |||
# | # 创建一个新的备份文件,并将所有需要备份的目录和文件都添加到其中 | ||
tar -czpf "$basedir/$backup_file" $bakfiles | |||
# 大文件打包前后,缓解磁盘压力,降低I/O错误概率 | |||
sleep 2s ;sync;sync | |||
echo "Backup completed: $backup_file" | |||
# 列出 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 | ||
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> | </syntaxhighlight> | ||
[[分类:Linux]] | |||