## 20141017
## run as a cron script every 5 minutes
## NB: Filesystem mounted on /u01 periodically exceeds 80%
##
#!/bin/bash
fs=u01
function deletion() {
pushd ~ > /dev/null
largedir=`du -k /u01 | sort -rn | head -n2 | awk '{print $2}' | grep -v "^/u01$"`
echo $largedir
rm -rf $largedir
popd > /dev/null
}
usage=`df -h | awk '$1 ~/dev\/sdc1/' | awk '{print $5}' | sed 's/%//g'`
while [ $usage -gt "40" ]
do
echo "Filesystem $fs has currently reached $usage% usage."
echo "Deleting files.."
deletion
done
假設FS使用率是41%,並且largedir
的大小是13G。如果我允許刪除不間斷地運行,那麼FS的使用率可能會下降到1%;當我運行deletion()
時,我希望程序能夠同時檢查使用情況,一旦使用量下降到40%以下,就必須退出。 我的方法正確嗎?或者從某種程度上更容易從最小的目錄中刪除目錄 - >通過尾巴而不是頭部最大化目錄?是否有可能擺脫基於條件執行的bash命令?
'awk | awk'和'awk | grep'管道有難聞的氣味。請記住,Awk是'grep'的超集,你通常可以將這些重構爲一個Awk腳本。 'du -k/01 | sort -rn | awk'!/^\/u01 $/{print $ 2} NR == 2 {exit(0)}''和'df -h | awk'$ 1〜/ dev \/sdc1/{sub(/%/,「」);打印$ 5}'' – tripleee 2014-10-22 08:09:58
哦,我不知道那個......但是如上所述使用不同的模式匹配機制是不好的? – ams 2014-10-25 22:34:56
難以閱讀和維護,浪費,所以不是最好的做法;但另一方面,無論如何在不浪費生命的情況下完成工作在事物的宏偉計劃中是可以接受的。 – tripleee 2014-10-26 06:31:05