通过Runtime.getRuntime()执行find命令时出错.exec()

时间:2015-05-14 12:16:17

标签: java unix

从Java

执行以下命令时遇到问题
Process p2 = Runtime.getRuntime().exec("find /home/app/reports/ATM.CCC.* -mtime +1000");

我需要查找格式为ATM.CCC.且超过1000天的文件。 还需要删除超过100天的文件。

1 个答案:

答案 0 :(得分:2)

我假设您希望将/home/app/reports/ATM.CCC.*扩展为文件列表。

这不起作用,因为“globbing”是一个shell函数,而不是由exec系统调用...或Java exec(...)方法执行的核心系统函数。

您需要做的是在shell中运行该命令; e.g。

.... exec(new String[]{
             "sh", "-c",
             "find /home/app/reports/ATM.CCC.* -mtime +1000"
          });

请注意,您需要使用带有字符串数组的exec重载。如果您尝试使用带有String的重载并将其拆分为参数...就像这样......

.... exec("sh -c \"find /home/app/reports/ATM.CCC.* -mtime +1000\"");

命令字符串将无法正确分割。 (exec拆分器不了解Unix / Linux shell样式引用。)