通过脚本达到webdav远程的版本控制

在我们使用webdav备份时候,因为是远程服务器,不能进行版本控制,会导致备份文件越来越多,就比如开源阅读APP,每天每次退出后都会自动备份一个文件,因此写了这个脚本

 

#!/bin/bash
set -euo pipefail
# 指定目录
dir="https://your_webdav_directory"
# 使用 while read 命令遍历文件列表,并将结果存储在数组中
declare -a all_zip_files=()
while IFS= read -r -d '' zip_file; do
  all_zip_files+=("$zip_file")
done < <(curl -s -u 'username:password' $dir | grep -oP 'href="\K[^"]+\.zip(?=")' | tr '\n' 'k_e_k_c_c_n-d_i_f_t_c_n')
# 如果目录下没有 .zip 文件,则打印错误信息并退出
if [ "${#all_zip_files[@]}" -eq 0 ]; then
  echo "错误:在目录 $dir 中没有找到任何 .zip 文件" >&2
  exit 1
fi
# 对文件列表按照修改时间从新到旧排序
IFS=$'\n'
sorted_zip_files=($(sort -rn <<<"${all_zip_files[*]}"))
# 从排序后的文件列表中提取最新的 3 个文件
declare -a latest_versions=()
for ((i = 0; i < ${#sorted_zip_files[@]} && i < 3; i++)); do
  latest_versions+=("${sorted_zip_files[$i]}")
done
# 如果找到的文件不足三个,打印警告信息
if [ "${#latest_versions[@]}" -lt 3 ]; then
  num_zip_files="${#all_zip_files[@]}"
  echo "警告:在目录 $dir 中找到 $num_zip_files 个 .zip 文件,但仅找到了 ${#latest_versions[@]} 个最新版本" >&2
fi
# 删除目录下所有不在 latest_versions 中的 .zip 文件
for zip_file in "${all_zip_files[@]}"; do
  if [[ ! " ${latest_versions[@]} " =~ " ${zip_file} " ]]; then
    echo "删除旧的 .zip 文件:$zip_file"
    curl -s -X DELETE -u "username:password" "https://your_webdav_directory/${zip_file##*/}"
  fi
done

需要的兄弟自取。

 

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
小火柴阿的头像-腾飞Webos社区Webos会员