shell清理指定目錄中指定天數(shù)之前的舊文件
前言
我們在服務(wù)器運行一些服務(wù)經(jīng)常會產(chǎn)生很多臨時文件,
而有些臨時文件不定期處理很容易就打滿了整個磁盤;
所以有必要去定期清理,基于這個需求我們就可以搞一個腳本結(jié)合crontab
或者服務(wù)調(diào)度這些來使用;
腳本實現(xiàn)
#!/bin/bash # cleanup_old_files - 清理指定目錄中指定天數(shù)之前的舊文件 # $1: 目錄名稱 # $2: 天數(shù) # $3: (可選)關(guān)鍵字,用于匹配文件名 function cleanup_old_files() { local dir="$1" # 目錄名稱 local days="$2" # 天數(shù) local keyword="$3" # 匹配文件名的關(guān)鍵字 # 參數(shù)有效性檢查 if [ -z "$dir" ]; then echo "錯誤:目錄參數(shù)為空." return 1 fi if [ ! -d "$dir" ]; then echo "錯誤:目錄 $dir 不存在." return 1 fi if ! [[ "$days" =~ ^[0-9]+$ ]]; then echo "錯誤:天數(shù)參數(shù)無效." 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 # 通過-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é)
注意事項1:mtime 為0的情況
值得注意的是,mtime
為0的時候,也就是我們想模擬當(dāng)天,不能帶修飾符(+/-
);
Debian和MacOS執(zhí)行的表現(xiàn)是沒有報錯,但是沒有任何操作,所以代碼里面做了一個區(qū)分;
注意事項2:/tmp為軟鏈的時候
若是find
命令想要檢索到里面的內(nèi)容,記得帶-L
,否則沒法檢索出任何東西;
# 在mac下tmp是一個軟鏈鏈接到/private/tmp ls -l /tmp lrwxr-xr-x@ 1 root wheel 11 Dec 2 19:37 /tmp -> private/tmp
帶上-L
之后就能兼容Linux和MacOS兩個平臺,方便本地調(diào)試也能測試;
這個參數(shù)大體的作用就是遞歸去找,所以符號鏈接也能被檢索;
不帶的情況下默認(rèn)都是只找硬鏈接,符號鏈接就會直接忽略。
到此這篇關(guān)于shell清理指定目錄中指定天數(shù)之前的舊文件的文章就介紹到這了,更多相關(guān)shell清理指定文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux shell實現(xiàn)守護(hù)進(jìn)程腳本
這篇文章主要介紹了linux shell實現(xiàn)守護(hù)進(jìn)程腳本,非常簡單實用的代碼,這里推薦給小伙伴。希望大家能夠喜歡。2015-03-03Shell $?獲取函數(shù)返回值或者上一個命令的退出狀態(tài)
這篇文章主要介紹了Shell $?獲取函數(shù)返回值或者上一個命令的退出狀態(tài),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01linux shell 管道命令(pipe)使用及與shell重定向區(qū)別
這篇文章主要介紹了linux shell 管道命令(pipe)使用及與shell重定向區(qū)別,需要的朋友可以參考下2015-10-10Shell+Curl網(wǎng)站狀態(tài)檢查腳本 抓出無法訪問的站點
這篇文章主要介紹了Shell+Curl網(wǎng)站狀態(tài)檢查腳本 抓出無法訪問的站點,需要的朋友可以參考下2015-10-10shell通過遍歷輸出兩個日期范圍內(nèi)所有日期的方法
這篇文章主要介紹了在shell通過遍歷輸出兩個日期范圍內(nèi)所有日期的方法,文中給出了詳細(xì)的示例代碼以及實現(xiàn)思路流程,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06Linux設(shè)置每晚定時備份Oracle數(shù)據(jù)表的操作命令
這篇文章主要介紹了Linux設(shè)置每晚定時備份Oracle數(shù)據(jù)表,本文通過腳本命令給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12