web-dev-qa-db-ja.com

rsync:サーバーにターゲットディレクトリを作成するように構成するにはどうすればよいですか?

ローカルコンピューターからサーバーにrsyncしたいと思います。存在しないディレクトリで、rsyncが最初にサーバー上にそのディレクトリを作成するようにします。

どうやってやるの?

124
ufk

作成する最後のリーフディレクトリよりも多い場合は、最初に個別のssh ... mkdir -pを実行するか、または--rsync-pathトリックを ここで説明 として使用できます。

rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/

または、Tonyが提案した--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 /を作成します。

130
mivk

Sshを使用してrsyncを接続していると仮定して、sshコマンドを送信する前に:

ssh user@server mkdir -p existingdir/newdir

既に存在する場合、何も起こりません

32
Alfredo Yong

-R, --relativeオプションはこれを行います。

たとえば、/var/named/chrootをバックアップし、リモートサーバー上に同じディレクトリ構造を作成する場合、-Rはそれを実行します。

14
Tony

これは私のために働いた:

 rsync /dev/null node:existing-dir/new-dir/

私はこのメッセージを受け取ります:

skipping non-regular file "null"

しかし、空のディレクトリがぶらぶらしていることを心配する必要はありません。

13
kdubs

1つのrsyncコマンドでそれを行うことはできないと思いますが、最初に次のように余分なディレクトリを「事前作成」できます:

rsync --recursive emptydir/ destination/newdir

ここで、「emptydir」はローカルの空のディレクトリです(最初に一時ディレクトリとして作成する必要があります)。

それはちょっとしたハックですが、私には役立ちます。

乾杯

クリス

4
Chris Dennis

この答えは他の少しの答えを使用しますが、うまくいけば状況に関して少し明確になるでしょう。 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 [email protected]:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
[email protected]'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

これでこれが少し解消されることを願っています。

3
Mandible79

例えば:

from:/xxx/a/b/c/d/e/1.html

宛先: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 /

2
Montage