回答:
作成する最後のリーフディレクトリよりも多くある場合は、ssh ... mkdir -p
最初に別のディレクトリを実行するか、ここで説明する--rsync-path
トリックを使用できます。
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
または--relative
、Tonyの提案に従ってオプションを使用します。その場合、作成するソースのディレクトリ構造ではなく、存在する必要がある宛先のルートのみを指定します。
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 /を作成します。
&&
か?
rsyncを接続するためにsshを使用していると仮定すると、前にsshコマンドを送信することはどうでしょうか。
ssh user@server mkdir -p existingdir/newdir
すでに存在する場合は、何も起こりません
rsync
、ではなく、したがって応答がありません。
ssh
サポートされておらず、リモートエンドのにrsync
接続している場合、これはオプションではありませんrsync daemon
。
-R, --relative
オプションでは、これを行います。
たとえば/var/named/chroot
、リモートサーバーで同じディレクトリ構造をバックアップして作成する場合-R
は、それだけを行います。
/./
ソースパスでを使用して作成するパスの一部のみを指定することもできます。詳細については、manページを参照してください。
rsync
ています。ターゲットフォルダが存在しない場合、ディレクトリは自動的に作成されません。はぁ。
--relative
ます。それはあなたが思うことをしないかもしれません。
--relative
と組み合わせて/./
、ほとんどの初心者が探しているものです。rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
デスクトップのコンテンツをターゲットデスクトップにコピーします。ユーザー名の違いがこれにどのように影響するかわかりません。
これは私のために働きました:
rsync /dev/null node:existing-dir/new-dir/
私はこのメッセージを受け取ります:
skipping non-regular file "null"
しかし、空のディレクトリがぶらつくことを心配する必要はありません。
私はあなたが1つのrsyncコマンドでそれを行うことができるとは思いませんが、最初に次のように追加のディレクトリを「事前作成」することができます:
rsync --recursive emptydir/ destination/newdir
ここで、 'emptydir'はローカルの空のディレクトリです(最初に一時ディレクトリとして作成する必要がある場合があります)。
それは少しハックですが、私にとってはうまくいきます。
乾杯
クリス
rsync /dev/null node:existing-dir/new-dir/
上記の提案を参照してください。
この回答では他の回答を少し使用していますが、状況についてはもう少し明確になることを願っています。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
これで少しはうまくいくといいのですが。
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
ましたが、ターゲットで作成されたのは/ remote / path / to / data / myappdata / myappdata /です
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
mkdir
ため、ハックを使用し--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
ています。追加のファイルが作成されますが、後で削除できます。