『rsync』の使い方|期間指定、かつツリー構造を維持して転送する方法

『rsync』の使い方|期間指定、かつツリー構造を維持して転送する方法

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

LinuxやUnix系OSサーバ間でよく使うコマンド『rsync』。

1カ月以内に中身を作成、または変更したファイルのみを転送しようとしたら、以外と手間がかかりました。
同じ悩みを抱える方々、参考までにご一読ください。

ローカルPCにリモートサーバ上の1ヵ月以内のログをSSHでダウンロードしたい!

リモートサーバ(OSはlinux) ⇒ ローカルPC

まず、『rsync』でファイル転送だけを実施するなら、こんなコマンドですよね~。
$ rsync -av -e ssh アカウント名@リモートサーバのIPアドレス:/remote_path/src/ /local_path/dst/

では、1カ月以内のログを転送するとなると、どうすればいいのでしょう。
そこで「find」コマンドと「files-from」オプションを追加します。

$ rsync -av -e ssh --files-from=<(ssh アカウント名@リモートサーバのIPアドレス “find /remote_path/src/ -mtime -32 -type f -exec ls $(basename {}) \;”) アカウント名@リモートサーバのIPアドレス:/ /local_path/dst/

上記コマンドを「--dry-run」オプション付で実行すると・・・・

remote_path/src/log_file1
remote_path/src/log_file2
remote_path/src/log_file3

転送するログとしては問題ないものの、前についているパスが気になりますね。
例えば、以下のような場合。

”リモートサーバAの/remote_path/src/以下のツリー構造だけ、ローカルPCの/local_path/dst/以下に転送したい。”

このケースだと、上記rsyncコマンドでこんな結果になります。

■希望している形
/local_path/dst/dir1/log_file
/local_path/dst/dir2/log_file
/local_path/dst/dir3/log_file

■コマンド結果
/local_path/dst/remote_path/src/dir1/log_file
/local_path/dst/remote_path/src/dir2/log_file
/local_path/dst/remote_path/src/dir3/log_file

このギャップを埋めるには、以下のコマンドが使えます。

$ rsync -av -e ssh --files-from=<(ssh アカウント名@リモートサーバのIPアドレス “cd /remote_path/src; find ./* -mtime -32 -type f -exec ls $(basename {}) \;”) アカウント名@リモートサーバのIPアドレス:/remote_path/src/ /local_path/dst/

そう、カレントディレクトリを変えてから、「find」には相対パスを渡しましょう!
他にもいい方法があるかもしれませんが、今回はこれで落ち着きました。

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

【週刊bitWave】(メルマガ)始めました!

登録はこちらからメールアドレスを入力してお申込みください。

ご登録いただいたメールアドレスは 【週刊bitWave】の更新情報の配信にのみ使用します。

個人情報の取扱いに関しては、「プライバシーポリシー」をご確認ください。解除はいつでもこちらから行うことが可能です。

あなたにおすすめ