最近,我需要创建一个Groovy脚本来删除Linux机器中的某些目录。原因如下:
我决定做的很简单:
在已知位置列出所有前缀为webapp的目录
按时间,降序对它们进行排序,从第四个索引开始执行删除操作。
1def numberOfDirectoriesToKeep = 4
2def webappsDir = new File('/usr/local/tomcat/tomcat_aps')
3def webDirectories = webappsDir.listFiles().grep(~/.*webapps_.*/)
4def numberOfWeappsDirectories = webDirectories.size();
5
6if (numberOfWeappsDirectories >= numberOfDirectoriesToKeep) {
7 webDirectories.sort{it.lastModified() }.reverse()[numberOfDirectoriesToKeep..numberOfWeappsDirectories-1].each {
8 logger.info("Deleteing ${it}");
9 // here we'll delete the file. First try was doing a Java/groovy command of deleting directories
10 }
11} else {
12 logger.info("Too few web directories")
13}
14
没用!!!文件未删除。 碰巧代理程序以与运行tomcat的用户不同的身份运行。该代理无权删除目录。
我的解决方案是使用运行shell命令sudo。
长话短说,这是完整的脚本:
1import org.slf4j.Logger
2import com.my.ProcessingJobResult
3
4def Logger logger = jobLogger
5//ProcessingJobResult is proprietary
6def ProcessingJobResult result = jobResult
7
8try {
9 logger.info("Deleting old webapps from CI - START")
10 def numberOfDirectoriesToKeep = 4 // Can be externalized to input parameter
11 def webappsDir = new File('/usr/local/tomcat/tomcat_aps')
12 def webDirectories = webappsDir.listFiles().grep(~/.*webapps_.*/)
13 def numberOfWeappsDirectories = webDirectories.size();
14
15 if (numberOfWeappsDirectories >= numberOfDirectoriesToKeep) {
16 webDirectories.sort{it.lastModified() }.reverse()[numberOfDirectoriesToKeep..numberOfWeappsDirectories-1].each {
17 logger.info("Deleteing ${it}");
18 def deleteCommand = "sudo -u tomcat rm -rf " + it.toString();
19 deleteCommand.execute();
20 }
21 } else {
22 logger.info("Too few web directories")
23 }
24 result.status = Boolean.TRUE
25 result.resultDescription = "Deleting old webapps from CI ended"
26 logger.info("Deleting old webapps from CI - DONE")
27} catch (Exception e) {
28 logger.error(e.message, e)
29 result.status = Boolean.FALSE
30 result.resultError = e.message
31}
32
33return result
顺便说一句,有一个较小的索引错误,由于我们总是有更多目录,所以我决定不修复。