Использование библиотеки rsync4j, Java-реализации инструмента rsync для Linux, как синхронизировать данные из удаленного каталога с локальным каталогом

Мне нужна функциональность, как у rsync Инструмент Linux в моей программе Java. Для этого я выбрал библиотеку rsync4j.

Используя их документацию, я написал следующую программу:

import com.github.fracpete.processoutput4j.output.ConsoleOutputProcessOutput;
import com.github.fracpete.rsync4j.RSync;

public class MainClass {

    public static void main(String [] args) {

        System.out.println("Started");//check

        RSync rsync = new RSync()
            .source("/home/arth/DataSourceFolder/a.txt")
            .destination("/home/arth/DataDestinationFolder/")
            .recursive(true);
            // or if you prefer using commandline options:
            // rsync.setOptions(new String[]{"-r", "/one/place/", "/other/place/"});
            CollectingProcessOutput output = null;
            try {
                    System.out.println("Inside try");
                    output = rsync.execute();
                    System.out.println("End of try");
            } catch (Exception e) {
                    e.printStackTrace();
            }
            System.out.println(output.getStdOut());
            System.out.println("Exit code: " + output.getExitCode());
            if (output.getExitCode() > 0)
                System.err.println(output.getStdErr());
      }
}

Во фрагменте, на нашей локальной машине, файл a.txt копируется из одного места в другое. Это работает отлично. Файл успешно копируется, когда я запускаю его, и вот вывод:

Started

Inside try

End of try

Exit code: 0

Но мне нужно синхронизировать локальный каталог с каталогом, лежащим на удаленном хосте / машине. Когда я попытался сделать это с помощью простого rsync команда из терминала с помощью следующей команды

rsync remoteUserName@23.24.25.244:/home/beth/remoteFolder/a.png /home/arth/DataSourceFolder

Отлично работает. a.png IS копируется на локальный компьютер по указанному пути, хотя сначала запрашивается пароль удаленного компьютера.

Но проблема, когда я использую вышеупомянутую Java-программу для выполнения той же операции, заменив строки № 11 и 12 на:

.source("remoteUserName@23.24.25.244:/home/beth/remoteFolder/a.png")
.destination("/home/arth/DataDestinationFolder/")

программа зависает после печати Started в консоли. Не генерируется ни исключение, ни программа.

Вопрос в том, как мне решить эту проблему?

0 ответов

(старый пост, я знаю, но здесь все идет...) Библиотека rsync4j не позволяет взаимодействовать. В вашем случае базовый двоичный файл rysnc запрашивает пароль в процессе, созданном библиотекой Java, но никогда не получает его. Вы должны быть в состоянии использовать формат USER:PASSWORD@HOST/DIR достичь своей цели.

Другие вопросы по тегам