shell清理指定目錄中指定天數(shù)之前的舊文件
前言
我們?cè)诜?wù)器運(yùn)行一些服務(wù)經(jīng)常會(huì)產(chǎn)生很多臨時(shí)文件,
而有些臨時(shí)文件不定期處理很容易就打滿(mǎn)了整個(gè)磁盤(pán);
所以有必要去定期清理,基于這個(gè)需求我們就可以搞一個(gè)腳本結(jié)合crontab或者服務(wù)調(diào)度這些來(lái)使用;
腳本實(shí)現(xiàn)
#!/bin/bash
# cleanup_old_files - 清理指定目錄中指定天數(shù)之前的舊文件
# $1: 目錄名稱(chēng)
# $2: 天數(shù)
# $3: (可選)關(guān)鍵字,用于匹配文件名
function cleanup_old_files() {
local dir="$1" # 目錄名稱(chēng)
local days="$2" # 天數(shù)
local keyword="$3" # 匹配文件名的關(guān)鍵字
# 參數(shù)有效性檢查
if [ -z "$dir" ]; then
echo "錯(cuò)誤:目錄參數(shù)為空."
return 1
fi
if [ ! -d "$dir" ]; then
echo "錯(cuò)誤:目錄 $dir 不存在."
return 1
fi
if ! [[ "$days" =~ ^[0-9]+$ ]]; then
echo "錯(cuò)誤:天數(shù)參數(shù)無(wú)效."
return 1
fi
# 如果未指定天數(shù),則默認(rèn)為當(dāng)天
if [ -z "$days" ]; then
days=0
fi
# 構(gòu)建查找命令,根據(jù) $days 的值進(jìn)行區(qū)分
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
# 如果指定了關(guān)鍵字,則加入查找命令中
if [ -n "$keyword" ]; then
find_cmd+=" -name \"*$keyword*\""
fi
# 打印完整命令
echo "執(zhí)行命令: $find_cmd"
# 執(zhí)行查找并刪除文件
if [ "$days" -eq 0 ]; then
echo "正在清理目錄 $dir 中當(dāng)天創(chuàng)建的$(if [ -n "$keyword" ]; then echo "包含關(guān)鍵字 $keyword 的 "; else echo "所有 "; fi)文件..."
else
echo "正在清理目錄 $dir 中 $days 天之前創(chuàng)建的$(if [ -n "$keyword" ]; then echo "包含關(guān)鍵字 $keyword 的 "; else echo "所有 "; fi)文件..."
fi
# 通過(guò)-exec rm -rf {} + 刪除查找到的文件
if eval "$find_cmd -exec rm -v -rf {} +" >/dev/null; then
if [ "$days" -eq 0 ]; then
echo "已刪除當(dāng)天的舊文件."
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"總結(jié)
注意事項(xiàng)1:mtime 為0的情況
值得注意的是,mtime為0的時(shí)候,也就是我們想模擬當(dāng)天,不能帶修飾符(+/-);
Debian和MacOS執(zhí)行的表現(xiàn)是沒(méi)有報(bào)錯(cuò),但是沒(méi)有任何操作,所以代碼里面做了一個(gè)區(qū)分;
注意事項(xiàng)2:/tmp為軟鏈的時(shí)候
若是find命令想要檢索到里面的內(nèi)容,記得帶-L,否則沒(méi)法檢索出任何東西;
# 在mac下tmp是一個(gè)軟鏈鏈接到/private/tmp ls -l /tmp lrwxr-xr-x@ 1 root wheel 11 Dec 2 19:37 /tmp -> private/tmp
帶上-L之后就能兼容Linux和MacOS兩個(gè)平臺(tái),方便本地調(diào)試也能測(cè)試;
這個(gè)參數(shù)大體的作用就是遞歸去找,所以符號(hào)鏈接也能被檢索;
不帶的情況下默認(rèn)都是只找硬鏈接,符號(hào)鏈接就會(huì)直接忽略。
到此這篇關(guān)于shell清理指定目錄中指定天數(shù)之前的舊文件的文章就介紹到這了,更多相關(guān)shell清理指定文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
fedora 23 lvm2格式 根目錄磁盤(pán)空間不足 擴(kuò)容方法
下面小編就為大家?guī)?lái)一篇fedora 23 lvm2格式 根目錄磁盤(pán)空間不足 擴(kuò)容方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
linux shell中“.” 和 “./”執(zhí)行的區(qū)別詳解
這篇文章主要介紹了linux shell中“.” 和 “./”執(zhí)行的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
3000字掃盲shell基礎(chǔ)知識(shí)(新手必備)
這篇文章主要介紹了3000字掃盲shell基礎(chǔ)知識(shí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Shell腳本讀取標(biāo)準(zhǔn)ini配置文件Demo
這篇文章主要介紹了Shell腳本讀取標(biāo)準(zhǔn)ini配置文件Demo,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-05-05
exit(-1)或者return(-1)shell得到的退出碼為什么是255
exit(-1)或者return(-1)shell得到的退出碼為是255,大家知道為什么嗎?帶著這個(gè)疑問(wèn)來(lái)腳本之家學(xué)習(xí)下吧,本篇文章告訴大家答案2015-10-10
一天一個(gè)shell命令 linux文本操作系列-tree命令詳解
這篇文章主要介紹了一天一個(gè)shell命令 linux文本操作系列-tree命令詳解,需要的朋友可以參考下2016-06-06
crontab實(shí)現(xiàn)每隔多少天執(zhí)行一次腳本的兩種方法
相信大家在工作中,經(jīng)常會(huì)遇到定時(shí)執(zhí)行腳本的功能要求,或某個(gè)命令的情況。那么下面這篇文章主要給大家介紹了關(guān)于crontab實(shí)現(xiàn)每隔多少天執(zhí)行一次腳本的相關(guān)資料,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-08-08
shell自動(dòng)安裝python3的腳本寫(xiě)法
這篇文章主要介紹了shell自動(dòng)安裝python3的腳本寫(xiě)法,本文給大家提到了shell腳本一鍵安裝python3+pip的方法,需要的朋友可以參考下2019-12-12
shell腳本從SVN推送到多臺(tái)服務(wù)器的代碼
shell 腳本從SVN推送到多臺(tái)服務(wù)器,需要的朋友可以參考下2013-02-02

