Runtime.getRuntime()。exec(命令)总是返回1

时间:2015-12-30 20:56:53

标签: java shell

我正在尝试在我的Mac上运行以下代码

 String command = "find /XXX/XXX/Documents/test1* -mtime +10 -type f -delete";

Process p = null;
p = Runtime.getRuntime().exec(command);
p.getErrorStream();
int exitVal = p.waitFor();

和exitVal始终为1,它不会删除文件 任何想法??

1 个答案:

答案 0 :(得分:2)

从我的实验中,find会在找不到任何结果时返回1find: /XXX/XXX/Documents/test1*: No such file or directory

首先,您应该使用ProcessBuilder,这解决了包含空格的参数问题,允许您重定向输入/错误流以及指定命令的起始位置(如果需要)

所以,玩这个,类似这样的东西,似乎对我有用(MacOSX)......

ProcessBuilder pb = new ProcessBuilder(
        new String[]{
            "find", 
            "/XXX/XXX/Documents/test1",
            "-mtime", "+10",
            "-type", "f",
            "-delete"
        }
);
pb.redirectErrorStream(true);
try {
    Process p = pb.start();
    InputStream is = p.getInputStream();
    int in = -1;
    while ((in = is.read()) != -1) {
        System.out.print((char)in);
    }
    int exitWith = p.exitValue();
    System.out.println("\nExited with " + exitWith);
} catch (IOException exp) {
    exp.printStackTrace();
}