如何使用Java运行带有通配符的unix/shell命令?

akh*_*ila 2 java

我想运行一些unix/shell命令Java并处理输出.我用过getRuntime.exec(),但它没有为某些命令提供正确的输出ls directory_path/*.tar.gz.对于那个命令,我的程序没有给出任何输出,但它给出了错误说法No such file or directory.但是相同的命令在命令提示符下提供正确的输出.

有没有其他方法可以在Java中执行包含通配符的命令?

aio*_*obe 5

有没有其他方法可以在Java中执行包含通配符的命令?

就在这里.

您的代码中存在三个潜在问题:

  1. 假设您想要查看外部命令的输出,您需要处理它产生的输出,并自己打印.

    按照我在这里提供的示例:

  2. *如果你天真地经历,那么shell的扩展是行不通的Runtime.exec.你必须/bin/bash明确地经历.

  3. 如果您尝试列出directory_path/*.tar.gz您应该知道的内容(如果您不是以a开头/)directory_path将相对于当前工作目录进行解析.首先尝试给出绝对路径以确保它有效,然后尝试弄清楚为什么它找不到相对路径.

这是一个应该有效的完整示例:

Process proc = new ProcessBuilder("/bin/bash", "-c",
                                  "ls /.../directory_path/*.tar.gz").start();

Reader reader = new InputStreamReader(proc.getInputStream());
int ch;
while ((ch = reader.read()) != -1)
    System.out.print((char) ch);
reader.close();
Run Code Online (Sandbox Code Playgroud)