O \
em -exec md6sum {} \;
é necessário para impedir que o shell interprete o caractere ;
como separador de comando. Se o Java não executar o comando em um shell, tente remover o escape \
para que o código se torne:
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("find testDir -type f -exec md5sum {} ;");
Acabei de confirmar este comportamento com o próximo programa de testes:
import java.io.*;
class Xx {
public static void main(String args[]) throws Exception {
Process p = Runtime.getRuntime().exec("/bin/echo \;");
InputStream in = p.getInputStream();
int c;
while ((c=in.read()) != -1)
System.out.write((char)c);
p.waitFor();
}
}
Compilado com javac Xx.java
, java Xx
outputs \;
. Se eu remover o \
, ele imprimirá ;
conforme o esperado.