2017-03-08 81 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

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