前言
因为测试web工程的时候,改改配置什么的,需要重启应用。
强迫症的我,每次重启都要清空下日志什么的。想写个shell脚本,依次达到如下效果:
1. 停止tomcat 服务;
2. 清空logs文件夹下的日志;
3. 清空webapps文件夹下自动解压的文件,但偶尔不想删除war包;
4. 重新启动tomcat服务;
5. 屏显下catalina.out里面日志;
第3点里面就有个反向删除的需求。
“反向删除”初探
常用的删除命令是rm,但这货不能自己搞定“反向删除”这事。
基本思路:先让grep反向查找,然后删除查找出来的文件&文件夹。
按照这个想法,基本可以用find和ls + grep搞定:
命令组合 | 具体命令行 |
---|---|
rm + ls + grep | rm -rf `ls ./webapps/ | grep **.war` |
rm + find + grep | rm -rf `find ./webapps/ -maxdepth 1 -mindepth 1 | grep -vE *.war` |
说明:“`”这个符号,是标准键盘上“1”的左边那个键,成对出现,前后各一。
比较
注:只针对这个该应用场景:
ls | find |
---|---|
在非当前目录(webapps/)执行,达不到删除效果 | 要注意过滤掉目标目录(webapps/) |
最终脚本
#!/bin/sh
set -x
./bin/catalina.sh stop
rm -rf ./logs/*
rm -rf `find ./webapps/ -maxdepth 1 -mindepth 1 | grep -vE *.war`
./bin/catalina.sh start
tail -f 5 ./logs/catalina.out
参考
《在 Unix 系统上查找数据的最佳工具和技巧》
http://blog.jobbole.com/92811/