Java执行命令行程序'find'返回错误

发布于 2021-01-29 20:35:38

从终端以下作品没问题

find testDir -type f -exec md5sum {} \;

其中testDir包含一些文件(例如,file1,file2和file3)的目录在哪里。

但是,在Java中使用以下命令时出现错误

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("find testDir -type f -exec md5sum {} \\;");

错误是

find: missing argument to `-exec'

我相信我正确地转义了字符。我尝试了几种不同的格式,但无法正常使用。

UPDATE
@jtahlborn完美地回答了这个问题。但是命令现在已经稍作更改,以在计算md5sum之前对目录中的每个文件进行排序,如下所示(我已经接受了原始问题的出色答案,因此我会给别人买啤酒,如果他们可以提出格式的话)为此,我尝试了所有可以想到的组合,但都没有成功。

“找到testDir -type f -exec md5sum {} + | awk {print $ 1} | sort | md5sum;”

新更新

对于管道,您需要一个外壳,所以我最终得到了这个外壳,它的效果很好,您仍然可以得到输出。

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(new String[] 
{
    "sh", "-l", "-c", "find " + directory.getPath() + " -type f -exec md5sum {} + | awk '{print $1}' | sort | md5sum"
});
关注者
0
被浏览
102
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用多参数调用exec(否则您可能会被转义规则咬住)。同样,由于您不是从shell脚本调用的,因此无需转义分号:

    Process pr = rt.exec(new String[]{"find", "testDir", "-type", "f", "-exec", "md5sum", "{}", ";"});
    


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看