ローカルコンピューターからサーバーに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/
または、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 /を作成します。
Sshを使用してrsyncを接続していると仮定して、sshコマンドを送信する前に:
ssh user@server mkdir -p existingdir/newdir
既に存在する場合、何も起こりません
-R, --relative
オプションはこれを行います。
たとえば、/var/named/chroot
をバックアップし、リモートサーバー上に同じディレクトリ構造を作成する場合、-R
はそれを実行します。
これは私のために働いた:
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 [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
これでこれが少し解消されることを願っています。
例えば:
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 /