之前寫過這篇 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
:刪除該檔案
這樣的寫法應該是萬無一失了。
沒有留言:
張貼留言