以下从终端工作没问题
find testDir -type f -exec md5sum {} \;
wheretestDir
是包含一些文件(例如 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 之前对目录中的每个文件进行排序,如下所示(我已经接受了原始问题的优秀答案,所以如果他们能想出格式,我会买啤酒为此。我已经尝试了我能想到的所有组合,但没有成功。)
“查找 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"
});