場景描述:linux
以下圖所示:在日誌目錄下有以日期命令的目錄,目錄裏面有目錄與Log日誌文件。由於空間報警,因此須要刪除前面的數據。bash
解決方法:運維
固然咱們可使用rm命令一個個地刪除,考濾運維的方便,咱們寫個腳原本實現最好了。若是是linux平臺的話,其實很簡單:ide
find ~/log -maxdepth 1 -mindepth 1 -type d -mtime +149 | xargs rm -rf
用上面的命令就能夠了。可是在AIX平臺下的find命令就不那麼友好了,由於它沒有 maxdepth 、mindepth參數。在找了幾圈後發現能夠用以下的命令來解決:ui
#刪除~/log/目錄下日期目錄,保留365天數據 find ~/log/* -prune -type d -name "20*" -mtime +365 -print | xargs rm -rf ## 上面的命令也等同於: find ~/log/ ! -name "." -prune -type -d -name "20*" -mtime + 365 -print | xargs rm -rf
裏面關鍵說明:spa
一、prune這個參數,它的含義是 當遇到目錄時,不進行遞歸查找。unix
二、對於開始目錄的限定,「./*」與「./」與「./ -name "."」與「./.」這幾個目錄是不同的,"./*"是從當前目錄下的全部的目錄與文件開始;而「./」從當前目錄開始;「./ -name "."」則是除了./目錄覺得的全部內容,等同「./*」;「./.」仍是當前目錄。日誌
最後把上面的語句放到crontab裏就能夠用定時任務每天刪數了。blog
參考: 遞歸
一、stackovernet上的問答《Equivalent maxdepth for find in AIX》
二、My熊貓眼 寫的《find命令-prune 參數引發的思考》