Shell
當已用容量達到 95% 時,刪除busybox 中 50GB 最舊的文件
好的,我在這裡請求了一個程式碼,但最初我並沒有要求讓它兼容busybox。我的錯。我是 Linux 和編碼的新手。
程式碼需要執行以下操作:
當 HD 達到 95% 的容量時,從目錄中刪除 50GB 的最舊數據(包含文件的目錄)。
他們給我的程式碼是,這不適用於busybox:
DIRS="a/ b/" MAXDELBYTES="53687091200" # 50GB DELBYTES="0" find $DIRS -type f -printf "%T@ %s %p\n" | sort -r -n | while read time bytes filename do rm -fv "$filename" DELBYTES=$((DELBYTES + bytes)) if [ $DELBYTES -ge $MAXDELBYTES ]; then break; fi done
什麼不起作用:
- -printf(將其更改為 -print)
- %T@ %s %p\n(不知道改成什麼)
- 不知道還有什麼不工作。我是編碼和 Linux 的新手。
現在需要將它翻譯成busybox,這樣它就可以在我的嵌入式Linux系統上執行。還需要添加一個 cron 命令,以便它在每個星期五執行。
由於find的**busybox實現不提供自定義輸出格式,您需要將格式化任務外包給單獨的程序 :) 幸運的是,甚至包括方便的命令。它的輸出格式欄位與GNU find使用的不同,因此您需要使用的符號也不同。下面的腳本假定並且是那些來自.
busybox
stat
find``stat``busybox
DIRS="a/ b/" MAXDELBYTES="53687091200" # 50GB DELBYTES="0" find $DIRS -type f -exec stat -c "%Y %s %n" {} \; | sort -r -n | while read time bytes filename do rm -fv "$filename" DELBYTES=$((DELBYTES + bytes)) if [ $DELBYTES -ge $MAXDELBYTES ]; then break; fi done
與往常一樣,在使用之前閱讀每個命令的說明。如果是
busybox
,您將找不到它們的聯機幫助頁,但您可以使用它--help
來顯示使用資訊。請注意,當文件名中包含換行符時,此解決方案可能會在不太可能的情況下破壞事情!這不應該發生在健康的系統上,但可能會發生,例如,如果有人設法闖入系統或利用允許創建任意文件的某些漏洞。
為防止在這種情況下意外刪除有用的文件,您應首先查找並刪除名稱中包含換行符的所有文件。要列出這些,請執行:
find / -name "* *"
(星號之間只有一個換行符。)然後,當您確定不需要所有這些文件時,使用其中一個刪除它們
find / -name "* *" -delete
要麼
find / -name "* *" -print0 | xargs -0 rm -vf
兩者都應該與
busybox
.