java Runtime.getRunTime()。exec&通配符?

时间:2010-01-21 18:57:55

标签: java shell command wildcard runtime.exec

我正在尝试使用

删除垃圾文件
Process p = Runtime.getRuntime().exec();

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

Process p = Runtime.getRuntime().exec("/bin/rm -f specificJunkFile.java");

当以下内容抛出“没有这样的文件或目录”时:

Process p = Runtime.getRuntime().exec("/bin/rm -f *.java");

我应该能够按照here提出的所有好处做,对吧?

5 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:9)

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

您可以使用bash作为命令。 e.g:

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

答案 2 :(得分:8)

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

  • 使用file.listFiles()获取文件列表
  • 使用file.getName()。contains(string)根据需要过滤它们
  • 遍历执行file.delete()
  • 的数组

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

答案 3 :(得分:2)

Runtime.getRuntime()。exec(new String [] {“sh”,“ - c”,“gunzip * .gz”});

答案 4 :(得分:0)

  1. 使用exec(String [] {cmd,arg1,arg2 ...)

  2. 以下是将结果作为字符串获取的完整示例:Link