#!/bin/bash # 检查是否传入了目标日期参数 # 如果参数数量不等于 1,说明没有正确传入目标日期 if [ $# -ne 1 ]; then echo "用法: $0 <目标日期(YYYY-MM-DD)>" exit 1 fi # 获取传入的目标日期参数 target_date="$1" # 验证传入的日期格式是否为 YYYY-MM-DD # 使用 date -d 命令尝试解析日期,如果解析失败则说明格式错误 if ! date -d "$target_date" +%Y-%m-%d >/dev/null 2>&1; then echo "错误: 日期格式必须为 YYYY-MM-DD" exit 1 fi # 将目标日期转换为时间戳,方便后续比较 target_timestamp=$(date -d "$target_date" +%s) # 遍历当前目录下的所有第一级子目录 for first_level_dir in */ ; do # 检查第一级子目录是否存在 if [ -d "$first_level_dir" ]; then # 遍历第一级子目录下的所有第二级子目录 for second_level_dir in "$first_level_dir"*/ ; do # 检查第二级子目录是否存在 if [ -d "$second_level_dir" ]; then # 遍历第二级子目录下的所有第三级子目录 for third_level_dir in "$second_level_dir"*/ ; do # 提取第三级子目录的名称 folder_name=$(basename "$third_level_dir") # 检查该名称是否符合 YYYY-MM-DD 日期格式 if [[ $folder_name =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then # 将该文件夹的日期转换为时间戳 folder_timestamp=$(date -d "$folder_name" +%s) # 比较该文件夹日期的时间戳和目标日期的时间戳 if [ "$folder_timestamp" -lt "$target_timestamp" ]; then # 如果该文件夹日期早于目标日期,则删除该文件夹及其内容 rm -rf "$third_level_dir" echo "已删除文件夹: $third_level_dir" fi fi done fi done fi done