正文

shell清理指定目录中指定天数之前的旧文件(linux shell 删除 指定日期之前的文件)满满干货

文章摘要

这篇文章介绍了名为 `cleanup_old_files` 的Bash脚本,用于清理指定目录中超过一定天数的旧文件。脚本接受三个参数:`目录名称`、`天数`(可选)以及`关键字`(可选)。它首先进行参数有效性检查,然后根据输入参数构建查找命令,筛选符合条件的文件并删除。脚本还支持基于天数和关键字的组合过滤,并输出删除操作的相关信息。例如,`cleanup_old_files "/path/to/directory" 30 "log"` 可以清理30天前创建且包含“log”的文件。

#!/bin/bash # cleanup_old_files – 清理指定目录中指定天数之前的旧文件 # $1: 目录名称 # $2: 天数 # $3: (可选)关键字,用于匹配文件名 function cleanup_old_files() { local dir=”$1″ # 目录名称 local days=”$2″ # 天数 local keyword=”$3″ # 匹配文件名的关键字 # 参数有效性检查 if [ -z “$dir” ]; then echo “错误:目录参数为空.” return 1 fi if [ ! -d “$dir” ]; then echo “错误:目录 $dir 不存在.” return 1 fi if ! [[ “$days”=~ ^[0-9]+$ ]]; then echo “错误:天数参数无效.” return 1 fi # 如果未指定天数,则默认为当天 if [ -z “$days” ]; then days=0 fi # 构建查找命令,根据 $days 的值进行区分 if [ “$days” -eq 0 ]; then find_cmd=”find -L “$dir” -type d -o -type f -mtime 0″ else find_cmd=”find -L “$dir” -type d -o -type f -mtime +$days” fi # 如果指定了关键字,则加入查找命令中 if [ -n “$keyword” ]; then find_cmd+=” -name “*$keyword*”” fi # 打印完整命令 echo “执行命令: $find_cmd” # 执行查找并删除文件 if [ “$days” -eq 0 ]; then echo “正在清理目录 $dir 中当天创建的$(if [ -n “$keyword” ]; then echo “包含关键字 $keyword 的 “; else echo “所有 “; fi)文件…” else echo “正在清理目录 $dir 中 $days 天之前创建的$(if [ -n “$keyword” ]; then echo “包含关键字 $keyword 的 “; else echo “所有 “; fi)文件…” fi # 通过-exec rm -rf {} + 删除查找到的文件 if eval “$find_cmd -exec rm -v -rf {} +” >/dev/null; then if [ “$days” -eq 0 ]; then echo “已删除当天的旧文件.” else echo “已删除 $days 天之前的旧文件.” fi else echo “删除失败.” return 1 fi } # 示例用法 # cleanup_old_files “/path/to/directory” 30 “log” # cleanup_old_files “/path/to/directory” 0 “log”