Использование библиотеки 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
достичь своей цели.