Java执行命令行程序'find'返回错误
从终端以下作品没问题
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"
});
-
使用多参数调用exec(否则您可能会被转义规则咬住)。同样,由于您不是从shell脚本调用的,因此无需转义分号:
Process pr = rt.exec(new String[]{"find", "testDir", "-type", "f", "-exec", "md5sum", "{}", ";"});
-
Java Runtime.getRuntime():从执行命令行程序获取输出
2021-02-02 关注 0 浏览239 1答案
-
Java Runtime.getRuntime():从执行命令行程序获取输出
2022-07-28 关注 0 浏览10 1答案
-
从python中执行命令行程序
2022-04-11 关注 0 浏览21 1答案
-
从python内部执行命令行程序
2021-01-29 关注 0 浏览104 1答案
-
怎么使用 SpringBoot 去执行命令行程序?
2020-07-11 关注 0 浏览625 1答案
-
如何在Java中执行命令行.exe文件
2021-01-30 关注 0 浏览155 1答案
-
解析Java命令行程序的参数
2021-01-30 关注 0 浏览90 1答案
-
运行.jar文件-双击vs.执行命令行
2021-01-30 关注 0 浏览96 1答案
-
通过Swift命令行程序使用NSURLSession
2021-01-31 关注 0 浏览80 1答案
-
在Java中,将命令发送到另一个命令行程序
2021-01-30 关注 0 浏览107 1答案