2017-03-08 73 views
0

我有一個bash腳本,它可以在文件超過一個或多個tomcat日誌目錄(我們運行多個實例)時成功刪除catalina.out文件一定的尺寸。我作爲一個cron工作每晚運行這個腳本。它本質上是這樣的:從cron作業創建空catalina.out(基於剛剛刪除的catalina.out)

find /apache-tomcat-blah*/. -name catalina.out -size +1000M -delete 

不過,我的問題是,我需要儘快刪除舊自動創建在其設立一個新的空單。

挑戰是我不會提前知道從哪個catalina.out中刪除了哪個tomcat實例。另外,我不想假設我知道所有對應於/ apache-tomcat-blah * /的tomcat實例。我們不時地改變它們。

我假設find命令知道它只是刪除了(也許我不應該假設),這樣我可以在理論上管信息爲:

$ echo "" > /apache-tomcat-justDeletedFromDir/logs/catalina.out 

,如果我能想出放什麼的apache-tomcat-justDeletedFromDir部分字符串。

我會很感激任何想法。謝謝!

+0

請注意'>'是重定向,而不是管道。管道指的是進程間通信,而不是文件 –

回答

0

爲什麼不直接使用這樣的:

for f in $(find /apache-tomcat-blah*/. -name catalina.out -size +1000M); do 
    rm $f 
    touch $f 
done 

所以你find命令在子shell $()現在執行,並通過輸出(文件列表)的bash腳本迭代並刪除每一個(經rm)並創建一個新的(通過touch

如果您的文件中有空格(注),您需要注意上述問題。

+0

感謝@Brian Agnew,這有很大的希望。我會馬上嘗試。 –

+0

是的,工作。再次感謝@布里安阿格紐 –