186

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

どうやってやるの?

4

12 に答える 12

210

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/ を作成します。

于 2014-04-07T09:26:36.987 に答える
24

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

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

于 2013-07-28T11:19:58.973 に答える
24

rsyncマニュアルページから( man rsync):

--mkpath                 create the destination's path component
于 2020-12-24T08:03:34.170 に答える
16

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

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

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

skipping non-regular file "null"

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

于 2013-03-14T17:57:00.830 に答える
6

1 つの rsync コマンドでそれを実行できるとは思いませんが、最初に次のように追加のディレクトリを「事前作成」できます。

rsync --recursive emptydir/ destination/newdir

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

ちょっとしたハックですが、私にとってはうまくいきます。

乾杯

クリス

于 2011-06-15T13:42:57.347 に答える
4

この回答では、他の回答を少し使用していますが、状況が少し明確になることを願っています。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

これで少しは解決することを願っています。

于 2014-01-14T15:26:32.343 に答える
2

例えば:

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/

于 2016-04-07T06:50:07.983 に答える