0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rsync4j - Javaでrsyncを触りたい。

Posted at

どうもぉ。はにおかさいです。
某サービスの開発のために、rsyncが使いたいなぁと。それもjavaで。
ところが、javaで実装されたrsync風的なものは見当たりませんでした。

調べていくうちに以下のものを見つけました

https://github.com/fracpete/rsync4j

概要

このrsync4jというものは、windowsとLinuxで動作する、rsyncのフロントエンドです。
windowsでは、rsyncに必要なファイルを一度どこかにバイナリを配備して、それを実行することによりrsyncをします。

テスト

普通に動く、うん
Z:\users\desktop\a>ls
rsync4j-all-3.1.2-12-spring-boot.jar

Z:\users\desktop\a>java -jar rsync4j-all-3.1.2-12-spring-boot.jar
usage: com.github.fracpete.rsync4j.RSync
       [-h] [--output-commandline] [--maxtime MAXTIME] [-v]
       [--info INFO] [--debug DEBUG] [--msgs2stderr] [-q] [--no-motd] [-c]
       [-a] [-r] [-R] [--no-implied-dirs] [-b] [--backup-dir BACKUPDIR]
       [--suffix SUFFIX] [-u] [--inplace] [--append] [--append-verify] [-d]
       [-l] [-L] [--copy-unsafe-links] [--safe-links] [--munge-links] [-k]
       [-K] [-H] [-p] [-E] [--chmod CHMOD] [-X] [-o] [-g] [--devices]
       [--specials] [-t] [-O] [-J] [--super] [--fake-super] [-S]
       [--preallocate] [-n] [-W] [-x] [-B BLOCKSIZE] [-e RSH]
       [--rsync-path RSYNCPATH] [--existing] [--ignore-existing]
       [--remove-source-files] [--delete] [--delete-before]
       [--delete-during] [--delete-delay] [--delete-after]
       [--delete-excluded] [--ignore-missing-args] [--delete-missing-args]
       [--ignore-errors] [--force] [--max-delete MAXDELETE]
       [--max-size MAXSIZE] [--min-size MINSIZE] [--partial]
       [--partial-dir PARTIALDIR] [--delay-updates] [-m] [--numeric-ids]
       [--usermap USERMAP] [--groupmap GROUPMAP] [--chown CHOWN]
       [--timeout TIMEOUT] [--contimeout CONTIMEOUT] [-I] [-M REMOTEOPTION]
       [--size-only] [--modify-window MODIFYWINDOW] [-T TEMPDIR] [-y]
       [--compare-dest COMPAREDEST] [--copy-dest COPYDEST]
       [--link-dest LINKDEST] [-z] [--compress-level COMPRESSLEVEL]
       [--skip-compress SKIPCOMPRESS] [-C] [-f FILTER] [--exclude EXCLUDE]
       [--exclude-from EXCLUDEFROM] [--include INCLUDE]
       [--include-from INCLUDEFROM] [--files-from FILESFROM] [-0] [-s]
       [--address ADDRESS] [--port PORT] [--sockopts SOCKOPTS]
       [--blocking-io] [--stats] [-8] [--human-readable] [--progress] [-i]
       [--out-format OUTFORMAT] [--log-file LOGFILE]
       [--log-file-format LOGFILEFORMAT] [--password-file PASSWORDFILE]
       [--list-only] [--bwlimit BWLIMIT] [--outbuf OUTBUF]
       [--write-batch WRITEBATCH] [--only-write-batch ONLYWRITEBATCH]
       [--read-batch READBATCH] [--protocol PROTOCOL] [--iconv ICONV]
       [--checkum-seed CHECKSUMSEED] [-4] [-6] [--version]
       [--additional ADDITIONAL] src dest
com.github.fracpete.rsync4j.RSync: error: too few arguments

Z:\users\desktop\a>java -jar rsync4j-all-3.1.2-12-spring-boot.jar Z:\users\desktop\a Z:\users\desktop\a\a
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries extractBinaries
情報: Setting up rsync4j environment in 'C:\Users\hani\rsync4j'...
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries extractBinaries
情報: Creating directory: C:\Users\hani\rsync4j\bin
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries extractBinaries
情報: Creating directory: C:\Users\hani\rsync4j\home\hani\.ssh
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries extractBinaries
情報: Copy your public key pairs into: C:\Users\hani\rsync4j\home\hani\.ssh
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cygcom_err-2.dll' to 'C:\Users\hani\rsync4j\bin\cygcom_err-2.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cygcrypto-1.0.0.dll' to 'C:\Users\hani\rsync4j\bin\cygcrypto-1.0.0.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cyggcc_s-seh-1.dll' to 'C:\Users\hani\rsync4j\bin\cyggcc_s-seh-1.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cyggssapi_krb5-2.dll' to 'C:\Users\hani\rsync4j\bin\cyggssapi_krb5-2.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cygiconv-2.dll' to 'C:\Users\hani\rsync4j\bin\cygiconv-2.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cygintl-8.dll' to 'C:\Users\hani\rsync4j\bin\cygintl-8.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cygk5crypto-3.dll' to 'C:\Users\hani\rsync4j\bin\cygk5crypto-3.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cygkrb5-3.dll' to 'C:\Users\hani\rsync4j\bin\cygkrb5-3.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cygkrb5support-0.dll' to 'C:\Users\hani\rsync4j\bin\cygkrb5support-0.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cygwin1.dll' to 'C:\Users\hani\rsync4j\bin\cygwin1.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/cygz.dll' to 'C:\Users\hani\rsync4j\bin\cygz.dll'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/ssh.exe' to 'C:\Users\hani\rsync4j\bin\ssh.exe'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/rsync.exe' to 'C:\Users\hani\rsync4j\bin\rsync.exe'
9 16, 2018 9:59:32 午後 com.github.fracpete.rsync4j.core.Binaries copyResourceTo
情報: Copying resource 'com/github/fracpete/rsync4j/windows-x86_64/ssh-keygen.exe' to 'C:\Users\hani\rsync4j\bin\ssh-keygen.exe'
skipping directory a

Z:\users\desktop\a>java -jar rsync4j-all-3.1.2-12-spring-boot.jar -av Z:\users\desktop\a Z:\users\desktop\a\a
sending incremental file list
a/
a/rsync4j-all-3.1.2-12-spring-boot.jar
a/a/

sent 9,556,407 bytes  received 47 bytes  19,112,908.00 bytes/sec
total size is 9,553,886  speedup is 1.00

Z:\users\desktop\a>

Javaでの呼び出し。

mavenにこんな感じで書いてください。

<dependency>
    <groupId>com.github.fracpete</groupId>
    <artifactId>rsync4j-all</artifactId>
    <version>3.1.2-12</version>
</dependency>

例 いずれも非同期ではありません。

オプションの設定
 // rsync -av /backupmoto/  /backupsaki/ --delete  --exclude='nozokitai/'
        RSync rsync = new RSync()
                .source("/backupmoto/")
                .destination("/backupsaki/")
                .archive(true).verbose(true).delete(true).exclude("nozokitai/");
        CollectingProcessOutput output = null;
        try {
            output = rsync.execute();
        } 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());

        ////
オプションを配列で投げる
        //rsync -av /backupmoto/  /backupsaki/ --delete  --exclude='nozokitai/'
        RSync rsync;
        try {
           rsync = new RSync();
           rsync.setOptions(new String[]{"-av", "/backupmoto/", "/backupsaki/", "--delete", "--exclude='nozokitai/"});
            CollectingProcessOutput output = rsync.execute();
            System.out.println(output.getStdOut());
            System.out.println("Exit code: " + output.getExitCode());
            if (output.getExitCode() > 0)
                System.err.println(output.getStdErr());
        } catch (Exception e) {
            e.printStackTrace();
        }

まとめ

できればjavaで実装されてるのが良かったのですが、バイナリを実行させる形態でもいいのかなぁと。実運用で何かわかったら、還元したいと思います。

Ref

https://fracpete.github.io/rsync4j/windows/
http://www.atmarkit.co.jp/ait/articles/1702/02/news031.html

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?