java - Runtime.getRuntime().exec(command) 总是返回 1

标签 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,并且不会删除文件 有什么想法吗??

最佳答案

根据我的实验,find 将在找不到任何结果时返回 1 (find:/XXX/XXX/Documents/test1*: No such文件或目录)

首先,您应该真正使用 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();
}

关于java - Runtime.getRuntime().exec(command) 总是返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34537130/

相关文章:

java - 使用 JAVA 程序运行 R 脚本

java - 如何从 Java 调用 Linux shell 命令

linux - 如何删除目录中的文件没有特定正则表达式匹配的目录?

java - 访问 JOption Pane 的按钮以向其中添加 MouseListener

Java TCP-Sockets 传输大于 4GB 的文件

java - 使用 Java 开发多线程应用程序

linux - 来自 shell 的 GROUP BY/SUM

linux - ls 查找所有以 ./开头的目录

linux - 如何在 sed 中将命令的结果作为字符串参数输入

Java 和 C++ (VS) RSA 加密