Linux定时备份:修订间差异
跳转到导航
跳转到搜索
无编辑摘要 |
无编辑摘要 |
||
| 第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]] | [[分类:Linux]] | ||
2024年7月19日 (五) 05:41的最新版本
#!/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="/data/docker/"
# 获取当前日期的时间戳
current_time=$(date +%s)
# 指定备份文件的名称,精确到秒
backup_file="backup_$(date +%Y%m%d)_$current_time.tgz"
echo =====================================================
date '+%D %T'
cd $basedir
# 删除备份目录中 $days 天以前备份文件,不包含子目录
find -maxdepth 1 -name "*.tgz" -mtime +"$max_days" -exec rm -f {} \;
# 创建一个新的备份文件,并将所有需要备份的目录和文件都添加到其中
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
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"