通过脚本达到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' '\0')
# 如果目录下没有 .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

需要的兄弟自取。

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
自用

初次使用webos

2023-2-10 0:47:52

自用

数据库不可为空

2023-4-19 12:54:25

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索