Проблема в том, что символ перенаправления (>
) представляет собой конструкцию на основе оболочки, не исполняемый файл. Так что, если вы не выполните эту команду через что-то вроде bash
(а это не так), она будет интерпретироваться как буквенный символьный аргумент для вашего вызова exiftool
.
Если вы хотите, чтобы это сработало, у вас есть два варианта:
- Получить bash, чтобы сделать это - передать всю командную строку в качестве аргумента
bash -c
. Это может потребовать некоторого героического побега, хотя в вашем случае все выглядит хорошо.
- Выполните перенаправление самостоятельно в Java. Вызвать команду без перенаправленного вывода (т. Е. Все до знака
>
), затем прочитать из выходного потока процесса и записать все содержимое в соответствующий файл.
Последний подход поначалу звучит как большая работа, но если учесть, что вам необходимо всегда читать вывод процесса (см. javadocs , второй абзац), это на самом деле очень мало дополнительно к этому. Вы просто отправляете этот вывод в файл, а не выбрасываете его.