AIX下find命令不遞歸刪除目錄

場景描述:

如下圖所示:在日誌目錄下有以日期命令的目錄,目錄裏面有目錄與Log日誌文件。因爲空間報警,所以需要刪除前面的數據。

image.png


解決方法:

當然我們可以使用rm命令一個個地刪除,考濾運維的方便,我們寫個腳本來實現最好了。如果是linux平臺的話,其實很簡單:

find ~/log -maxdepth 1 -mindepth 1 -type d -mtime +149 | xargs rm -rf

用上面的命令就可以了。但是在AIX平臺下的find命令就不那麼友好了,因爲它沒有 maxdepth 、mindepth參數。在找了幾圈後發現可以用如下的命令來解決:

#刪除~/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

裏面關鍵說明:

1、prune這個參數,它的含義是 當遇到目錄時,不進行遞歸查找。

2、對於開始目錄的限定,“./*”與“./”與“./ -name "."”與“./.”這幾個目錄是不一樣的,"./*"是從當前目錄下的所有的目錄與文件開始;而“./”從當前目錄開始;“./ -name "."”則是除了./目錄以爲的所有內容,等同“./*”;“./.”還是當前目錄。


最後把上面的語句放到crontab裏就可以用定時任務天天刪數了。



參考: 

1、stackovernet上的問答Equivalent maxdepth for find in AIX

2、My熊貓眼 寫的find命令-prune 參數引起的思考









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章