以下内容可以在终端中正常运行。
错误信息为:
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'
我相信我已经正确地转义了字符。我尝试了几种不同的格式,但是无法使其正常工作。
更新 @jtahlborn完美地回答了这个问题。但是现在命令略微改变,需要在计算md5sum之前对每个文件进行排序,命令如下(我已经接受了原始问题的优秀答案,因此如果有人能够提供这个命令的格式,我会为他们买一瓶啤酒。我已经尝试了下面回答中提到的所有组合,但都没有成功。)
"find testDir -type f -exec md5sum {} + | awk {print $1} | sort | md5sum ;"
新的更新
对于管道,您需要一个Shell,因此最终我得到了这个命令,它非常好用,而且您仍然可以获得输出。
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"
});