
ファイアウォールの背後にあるローカル マシンにディレクトリがあるとします。
local:/home/meee/workdir/
ファイアウォールの反対側にあるリモート マシン上のディレクトリ:
remote:/a1/a2/.../aN/one/two/
remote:/a1/a2/.../aN/one/dont-copy-me{1,2,3,...}/
N
... >= 0となる。
ローカル マシンには を使用するスクリプトがあります。このスクリプトで、変数だが既知の 'N' のみをリモート マシンからrsync
コピーし、次の結果になるようにします。one/two/
local:/home/meee/workdir/one/two/
を使用するとrsync remote:/a1/a2/.../aN/one/two/ ~/workdir/
、次のようになります。
local:/home/meee/workdir/two/
を使用するとrsync --relative remote:/a1/a2/.../aN/one/two/ ~/workdir/
、次のようになります。
local:/home/meee/workdir/a1/a2/.../aN/one/two/
どちらも私が望むものではありません。
rsync
望ましい結果を達成できるフラグはありますか?- そうでない場合、誰か簡単な解決策を思いつきますか?
答え1
--relative の場合は、ソース ディレクトリ パスにドットを挿入する必要があります。
rsync -av --relative remote:/a1/a2/.../aN/./one/two ~/workdir/
マニュアルを参照してください:
-R, --相対
[...]
指定したパスごとに、暗黙のディレクトリとして送信されるパス情報の量を制限することもできます。送信側の最新の rsync (2.6.7 以降) では、次のようにソース パスにドットとスラッシュを挿入できます。
rsync -avR /foo/./bar/baz.c remote:/tmp/
答え2
バージョン 2.6.7 より古いものからファイルをプルする場合は、のオプションrsync
を利用してこれを行うことができます。このオプションは、リモート上の rsync コマンドの場所を指定できるようにするものです。ただし、最初にディレクトリを変更するために使用することもできます。rsync
--rsync-path
rsync -aR --rsync-path='cd /a1/a2/.../aN/ && rsync' remote:one/two/ ~/workdir/