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

随心笔谈12个月前发布 admin
101 0

#!/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”

© 版权声明

相关文章