零 摘要
rm 过于强大,当使用root 用运行删除脚本时,总是担心误删除,本脚本改用unlink 命令删除单文件,使用黑白名单限制删除文件所在目录,只有被删除文件不在黑名单目录下且同时在白名单目录下才能删除
一 脚本
#!/bin/bash# 时间格式化,如 20211216120101
DATE="`date +%Y%m%d%H%M%S`"
#DATE="`date +%Y%m%d`"# 备份app 名称
# 需根据实际需要修改
APP_NAME="devopsapp"# 文件名称过滤词,正则匹配
# 需根据实际需要修改
#FILE_NAME_MATCH_KEY_WORD="'*'"# 备份文件目录,待删除文件所在的目录
# 需根据实际需要修改
DIR_BACKUP="/data/backup/${APP_NAME}"# 存放待删除文件名称,删除操作日志
DIR_LOG="${DIR_BACKUP}/logs"# 存放删除操作日志
DELETE_FILE_LOG="${DIR_LOG}/${APP_NAME}deletefile.${DATE}.log"#存放待删除文件清单
DELETE_FILE_LIST="${DIR_LOG}/${APP_NAME}deletefile.${DATE}.list"#黑名单 ,以黑名单开头的文件 均不能删除
BLACK_LIST=("/root" "/bin" "/dev" "/etc" "/lib" "/lib64" "/media" "/mnt" "/opt" "/proc" "/root" "/run" "/sbin" "/srv" "/sys" "/usr" "/var")#白名单,只有白名单开头的文件才能删除
# 需根据实际需要修改
WHITE_LIST=("/testdir" "/data/backup")# 文件保留天数
# 需根据实际需要修改
DAY=8# 待删除文件名称正则匹配echo -e "\n----------------- $(date +%F\ %T) Start -----------------"## 若日志目录不存在则新建
test -d ${DIR_LOG} || mkdir -p ${DIR_LOG}echo -e "\n================= $(date +%F\ %T) Start =================" >> ${DELETE_FILE_LOG}# 查找待删除文件,并存入DELETE_FILE_LIST
# '*' 根据需要修改 正则匹配
find ${DIR_BACKUP} -type f -mtime +${DAY} -iname 'mysql*' >> ${DELETE_FILE_LIST}
#find ${DIR_BACKUP} -type f -mtime +${DAY} | grep ${FILE_NAME_MATCH_KEY_WORD} >> ${DELETE_FILE_LIST}# 遍历待删文件清单 while read rows
doecho ${rows} waiting to delete >> ${DELETE_FILE_LOG}# 如果文件名是/ , 直接退出脚本# /* 通过黑白名单 过滤if [[ ${rows} == "/" ]]; thenecho ${rows} illeagal, refuse to delete,please check you script >> ${DELETE_FILE_LOG}break;else# 黑名单判断for blackListElement in "${BLACK_LIST[@]}"doif [[ ${rows} == ${blackListElement}* ]];thenecho ${rows} in blacklist ${blackListElement},refuse to delete this file >> ${DELETE_FILE_LOG} BLACK_LIST_FLAG="YES"breakelseBLACK_LIST_FLAG="NOT"fidone #结束黑名单判断#白名单 判断for whileListElement in "${WHITE_LIST[@]}"doif [[ ${rows} == ${whileListElement}* ]];thenWHITE_LIST_FLAG="YES"breakelseWHITE_LIST_FLAG="NOT"fidone # 结束白名单循环fi # 根目录判断echo ${row} BLACK_LIST_FLAG IS ${BLACK_LIST_FLAG} >> ${DELETE_FILE_LOG} echo ${row} WHITE_LIST_FLAG IS ${WHITE_LIST_FLAG} >> ${DELETE_FILE_LOG} if [[ ${BLACK_LIST_FLAG} == "NOT" ]] && [[ ${WHITE_LIST_FLAG} == "YES" ]];then# 执行删除操作unlink ${rows} && echo ${rows} delete success >> ${DELETE_FILE_LOG}echo ${rows} deletefidone < ${DELETE_FILE_LIST}echo -e "\n----------------- $(date +%F\ %T) END -----------------"echo -e "\n================= $(date +%F\ %T) END =================" >> ${DELETE_FILE_LOG}