之前寫過這篇 Delete None Keeping Files,在某個目錄依照建日保留最新的 N 個檔案,有個新改良的寫法或許更好懂。
#!/bin/bash
KEEP=10
DIRECTORY=/data/
find "$DIRECTORY" -maxdepth 1 -type f -name "*.log" -printf "%T@ %p\n" | sort -r | tail -n +$(($KEEP+1)) | awk '{print $NF}' | xargs rm -f
來解釋各段參數:
find "$DIRECTORY":尋找目標目錄-maxdepth 1:只找該目錄第一層-type f:只找尋檔案,不列入目錄-name '*.log':找尋副檔名為 log 的檔案-printf "%T@ %p\n":使用printf輸出,輸出方式為建立的時間戳 + 檔名sort -r:依照時間戳逆排序tail -n +$(($KEEP+1)):列出你要保留的檔案數以外的檔案awk '{print $NF}':只抓出檔案路徑xargs rm -f:刪除該檔案
這樣的寫法應該是萬無一失了。