Ошибка link_stat при запуске rsync из Java-программы

Я хотел бежать rsync из Java-программы. Вот код:

        String cmd = "rsync -auv /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv " + archive.getAbsolutePath();
        System.out.println(cmd);

        // capture stdout and stderr from running bash script
        Process p = Runtime.getRuntime().exec(cmd);
        String line;
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
        BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        while ((line = err.readLine()) != null) {
            System.out.println(line);
        }
        p.waitFor();
        in.close();
        err.close();

Однако, когда я запускаю эту программу Java, я получил ошибку:

rsync -auv /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv /rsrch1/rists/moonshot/data/dev/foundation/validation/archive
sending incremental file list

sent 18 bytes  received 12 bytes  60.00 bytes/sec
total size is 0  speedup is 0.00
rsync: link_stat "/rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

Когда я запускаю эту точную команду rsync -auv /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv /rsrch1/rists/moonshot/data/dev/foundation/validation/archive прямо на сервере, все работает просто отлично.

Я не понимаю, почему это не работает с Java.

1 ответ

Решение

После некоторых исследований я обнаружил, что это вызвано "*" в команде. Это подстановочный знак, распознаваемый только Bash, я должен запустить эту команду с bash, Получил это работать со следующим:

String[] cmd = new String[]{"/bin/bash", "rsync -auv /rsrch1/rists/moonshot/data/foundation/FoundationMedicine/*.csv " + archive.getAbsolutePath()};
Другие вопросы по тегам