【.sh】按文件目录批量删除 指定名称的全部文件,仅保留最新一个
按目录及名称关键字 批量删除文件,仅保留最新文件

#!/bin/bash ############################################################################### # Time:2022-1-5 # # Describe:多个目录下根据关键字查询并清理目录下的过期文件,仅保留最新文件 # ############################################################################### #### 【注意】################################################################## # 1. 路径命名规则:cls_list中的名称_path # # 2. 关键字命名规则:cls_list中的名称_keyword # ############################################################################### # 配置内容; cls_list="test_a test_b" # path及keyword test_a_path="/home/appuser/clsSpace/test/aaa/" test_a_keyword="a.log" # path及keyword test_b_path="/home/appuser/clsSpace/test/zzz/" test_b_keyword="b.log z.log" ## 人工确认是否需要清理数据,不区分大小写 #read -p "请确认是否进行相关路径下的数据清理(y/n):" cls # 无需人工确认,直接清理 cls="y" if [ "$cls" = "y" ] || [ "$cls" = "Y" ];then ## 开始执行脚本 begin_d=`date +%Y-%m-%d_%H:%M:%S` echo "" echo "================================== 执行开始时间:$begin_d ==================================" echo "" echo " --------------------------------------------------------------------------------------------" # 遍历配置内容(按目录循环) for i in ${cls_list};do #echo " <<<<<<<<<<<<<<<<<<<<<<<<<< 目 录 分 隔 线 >>>>>>>>>>>>>>>>>>>>>>>>>> " # 需要删除的路径 cls_path=${i}_path # 获取删除前 目录下文件总数 rm_begin=`ls ${!cls_path} |wc -l` # 需要删除的文件 cls_keyword=${i}_keyword echo "" echo " 删除路径:${!cls_path}" echo " 删除前 ${!cls_path}目录下文件总数:${rm_begin}" # 遍历keyword(目录下按关键字循环) for kw in ${!cls_keyword};do echo "" #echo " >>>>>>>>>>>>>>>>>>>>>>>>>> 文 件 分 割 线 <<<<<<<<<<<<<<<<<<<<<<<<<< " echo " ## 开始删除名称包含【${kw}】的文件 ##" # 根据关键字查询目录下的文件 keyword_filename=`ls -t ${!cls_path} |grep ${kw}` # 根据关键字获取目录下最新的文件 newFileName=`ls -lt ${!cls_path} |grep ${kw} |head -n 1 |awk '{print $9}'` # 循环获取根据关键字查询到的file for file in ${keyword_filename};do # 获取文件时间戳 file_date=$(date +%s -r ${!cls_path}${file}) ## 判断文件是否为需要保留的文件 ## echo "文件名:${file} --> 最新文件:$newFileName" if [ "${file}" = "${newFileName}" ];then ## 是最新文件,保留 echo "" echo " ::: 最新文件保留不删除:${file} --> 时间戳:${file_date} :::" echo "" else ## 不是最新文件,删除 echo " 删除文件:${file} --> 时间戳: ${file_date}" #rm -rf ${!cls_path}${file} fi done done # 获取删除后 目录下文件总数 rm_end=`ls ${!cls_path} |wc -l` rm_nums=$[${rm_begin}-${rm_end}] echo "" echo " 删除后 ${!cls_path}目录下文件总数:${rm_end},共删除文件:${rm_nums} 个" echo "" echo " --------------------------------------------------------------------------------------------" echo "" done ## 结束时间 #echo "" end_d=`date +%Y-%m-%d_%H:%M:%S` echo "================================== 执行结束时间:$end_d ==================================" echo "" else echo "" echo "未执行脚本,已退出" echo "" fi
-------------------------------------------------------------------------------------
如果万事开头难 那请结局一定圆满 @ Phoenixy
-------------------------------------------------------------------------------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现