rsync
ローカル コンピューターからサーバーに移動したいと考えています。存在しないrsync
ディレクトリで、最初にサーバー上にそのディレクトリを作成したいと考えています。
どうやってやるの?
rsync
ローカル コンピューターからサーバーに移動したいと考えています。存在しないrsync
ディレクトリで、最初にサーバー上にそのディレクトリを作成したいと考えています。
どうやってやるの?
ssh ... mkdir -p
作成する最後のリーフ ディレクトリが複数ある場合は、最初に別のディレクトリを実行するか、ここで説明され--rsync-path
ているトリックを使用できます。
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
または--relative
、トニーが提案するオプションを使用してください。その場合、作成されるソースのディレクトリ構造ではなく、存在する必要がある宛先のルートのみを指定します。
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
このようにして、 /pre_existing/dir/new/x/y/z/ になります
また、「y/z/」を作成したいが、「new/x/」内には作成したくない場合は、開始し./
たい場所を追加できます。--relative
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
/pre_existing/dir/y/z/ を作成します。
-R, --relative
オプションはこれを行います。
/var/named/chroot
例:リモート サーバー上に同じディレクトリ構造をバックアップして作成する場合は、それ-R
を行います。
rsync
マニュアルページから( man rsync
):
--mkpath create the destination's path component
これは私のために働いた:
rsync /dev/null node:existing-dir/new-dir/
私はこのメッセージを受け取ります:
skipping non-regular file "null"
しかし、空のディレクトリがぶら下がっていることを心配する必要はありません。
1 つの rsync コマンドでそれを実行できるとは思いませんが、最初に次のように追加のディレクトリを「事前作成」できます。
rsync --recursive emptydir/ destination/newdir
ここで、「emptydir」はローカルの空のディレクトリです (最初に一時ディレクトリとして作成する必要がある場合があります)。
ちょっとしたハックですが、私にとってはうまくいきます。
乾杯
クリス
この回答では、他の回答を少し使用していますが、状況が少し明確になることを願っています。rsyncしているものを指定していません-単一のディレクトリエントリまたは複数のファイル。
では、そこに含まれるファイルを移動するだけでなく、ソース ディレクトリ エントリを移動すると仮定しましょう。
ローカルに呼び出されたディレクトリdata/myappdata/
があり、その下に多数のサブディレクトリがあるとします。data/
ターゲットマシンにはありますが、ありません-data/myappdata/
これは簡単です:
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
リモート ディレクトリに別の名前を使用することもできます。
rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname
いくつかのファイルを移動するだけで、それらを含むディレクトリ エントリを移動しない場合は、次のようにします。
rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/
myappdata
リモート マシン上にファイルを配置するためのディレクトリが作成されます。この場合も、data/
ディレクトリはリモート マシン上に存在する必要があります。
ちなみに、私の-rvv
フラグの使用法は二重に詳細な出力を取得することです。これにより、フラグの機能と必要な再帰動作が明確になります。
rsync(Ubuntu 12.04で3.0.9)を使用したときに得られるものをお見せするために
$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine's password:
sending incremental file list
created directory /tmp/newdir
delta-transmission enabled
bar.txt
foo.txt
total: matches=0 hash_hits=0 false_alarms=0 data=0
これで少しは解決することを願っています。
例えば:
from: /xxx/a/b/c/d/e/1.html
to: user@remote:/pre_existing/dir/b/c/d/e/1.html
rsync:
cd /xxx/a/ && rsync -auvR b/c/d/e/ user@remote:/pre_existing/dir/