Выполнение программы командной строки Java 'find' возвращает ошибку

Следующее работает из терминала без проблем

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

Где testDir- это каталог, содержащий некоторые файлы (например, файл1, файл2 и файл3).

Однако я получаю сообщение об ошибке, используя следующее в Java

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

Ошибка:

find: missing argument to `-exec'

Я считаю, что правильно экранирую символы. Я пробовал несколько разных форматов, и я не могу заставить это работать.

ОБНОВЛЕНИЕ@jtahlborn отлично ответил на вопрос. Но команда теперь немного изменилась, чтобы отсортировать каждый файл в каталоге перед вычислением суммы md5 и выглядит следующим образом (я уже принял отличный ответ на исходный вопрос, поэтому я куплю кому-нибудь пиво, если они смогут придумать формат для этого. Я перепробовал все комбинации, которые я могу придумать, следуя приведенному ниже ответу, но безуспешно.)

"find 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"
});
5
задан Peter Kelly 23 May 2012 в 11:49
поделиться