java Runtime.getRunTime().exec&wildcards?

Jak*_*kob 11 java shell command wildcard runtime.exec

我正试图通过使用删除垃圾文件

Process p = Runtime.getRuntime().exec();
Run Code Online (Sandbox Code Playgroud)

只要我不使用通配符,它​​工作正常,即这工作:

Process p = Runtime.getRuntime().exec("/bin/rm -f specificJunkFile.java");
Run Code Online (Sandbox Code Playgroud)

而以下会抛出"没有这样的文件或目录":

Process p = Runtime.getRuntime().exec("/bin/rm -f *.java");
Run Code Online (Sandbox Code Playgroud)

我应该能够做到这里概述的所有好事,对吧?

小智 13

经过大量搜索,我发现了这个:http://www.coderanch.com/t/423573/java/java/Passing-wilcard-Runtime-exec-command

Runtime.exec(new String[] { "sh", "-c", "rm /tmp/ABC*" });
Run Code Online (Sandbox Code Playgroud)


z5h*_*z5h 9

那些是Bash通配符.它们在Bash shell中解释.您正在直接运行rm,因此没有shell将其解释*为"所有文件".

您可以使用bash作为命令.例如:

Runtime.getRuntime().exec("/path-to/bash -c \"rm *.foo\"")

  • 好吧,我正在做:Runtime.getRuntime().exec("/ bin/bash -c \"rm*.foo \""); 我得到了:ERROR>*.foo": - c:第0行:意外的EOF,同时寻找匹配的""这个我不明白......逃脱是正确的不是吗? (2认同)

Pau*_*ce. 8

我建议你让Java为你做这个吗?

  • 使用file.listFiles()获取文件列表
  • 如果需要,使用file.getName().contains(string)过滤它们
  • 迭代执行file.delete()的数组

优点:提高了可移植性,节省了exec()的成本

  • 你如何使用通配符.离开rm等.假设我有自己的二进制文件,我必须从java代码启动它.你会怎么做? (2认同)