背景:
jenkins每日發布很多版本, 上傳的文件占用了linux大量磁盤空間, 久而久之, 空間不足,故需要定期清理系統舊版本文件。
1. 選定清理目標, 分析目標文件列表
清理前:
文件夾列表查詢:
ll st-www/
可見文件列表是固定前綴"st-www.", 后面跟着的是版本號, 最大的版本號86就是最新的版本。
我只需要保留最新的10個版本,其他的刪除。
2. Shell腳本編寫clean.disk.sh
#!/bin/sh #計數 param=$(echo $1) echo $param filename=$(echo "${param}.*") echo $filename counts=$(find . -name "$filename"|sort -t"." -k3n|head -n -10|wc -l) echo "========= $1 待刪除文件數: $counts===========" if [ $counts -gt 0 ]; then find . -name "$filename"|sort -t"." -k3n|head -n -10|xargs rm -rf echo "========= $1 刪除完畢 =========" fi
3. 調用方法:
./clean-disk.sh st-www
4. 執行后,結果只剩10條最新的,說明已經OK:
5. 代碼解析:
(1)find . -name "$filename" 的查詢結果為:
(2)sort -t"." -k3n 表示對find的查詢結果進行"."分列后, 得到三列, 取第三列(第三列就是版本號)進行數字升序排序
(3)head -n -10 對排序后的結果從頭開始截取除后10條的所有記錄
(4)xargs rm -rf 對這些文件記錄進行刪除
完畢~~