我有一个 bash 脚本,一旦文件超过特定大小时,它会成功删除一个或多个 tomcat 日志目录(我们运行多个实例)的 catalina.out 文件。我每晚运行此脚本作为 cron 作业。它基本上看起来像这样:
find /apache-tomcat-blah*/. -name catalina.out -size +1000M -delete
但是,我的问题是我需要在旧的删除后立即自动创建一个新的空的。
挑战是我无法提前知道从哪个 tomcat 实例中删除了哪个 catalina.out。另外,我不想假设我知道对应于/apache-tomcat-blah*/的所有 tomcat 实例。我们会不时更改它们。
我假设 find 命令知道它刚刚删除的内容(也许我不应该这样假设),因此我理论上可以通过管道传输该信息,如下所示:
$ echo "" > /apache-tomcat-justDeletedFromDir/logs/catalina.out
如果我能弄清楚将什么放入字符串的 apache-tomcat-justDeletedFromDir 部分。
如果有任何想法,我将不胜感激。谢谢!
最佳答案
为什么不直接使用类似的东西:
for f in $(find /apache-tomcat-blah*/. -name catalina.out -size +1000M); do
rm $f
touch $f
done
因此您的find
命令现在在子shell $()
中执行,并且您的bash 脚本遍历输出(文件列表)并删除每个(通过 rm
) 并创建一个新的(通过 touch
)
如果您的文件中有空格,您需要小心上述情况(注意)。
关于bash - 从 cron 作业创建空的 catalina.out(基于刚刚删除的 catalina.out),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42675300/