web-dev-qa-db-ja.com

スラッシュとrsyncコマンド

私はこの質問で尋ねられたものと同じ線に沿って何かをしようとしています: RSync:どうすれば両方向に同期できますか?

ただし、ファイルパスの末尾にスラッシュを追加する必要があるかどうかがわかりません。基本的に、同じ名前で2つの異なるサーバー上にある2つのディレクトリの内容を同期するエイリアスコマンドを作成しようとしています。私が望まないのは、一方のディレクトリをもう一方のディレクトリにコピーすることです(これは、最後のスラッシュがどのように行われるかによっては可能性があることを私は知っています)。

私が現在持っているものは:

alias syncDirectories1 = 'rsync -tvur name@Host:/Users/me/directory/ /Users/me/directory/'
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@Host:/Users/me/directory/'

私が達成しようとしていることについては、両方のファイルパスの最後にスラッシュを付ける必要がありますか?

よろしくお願いします。

23
cadams

rsync(1)のマンページで説明されています。

ソースの末尾のスラッシュは、この動作を変更して、宛先に追加のディレクトリレベルが作成されないようにします。ソースの末尾の/は、「ディレクトリを名前でコピーする」ではなく「このディレクトリの内容をコピーする」という意味と考えることができますが、どちらの場合も、含まれるディレクトリの属性は宛先の含まれるディレクトリに転送されます。 。つまり、次の各コマンドは、/ dest/fooの属性の設定を含め、同じ方法でファイルをコピーします。

rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo

目的地に関しては、大きな影響はないと思います。ソースがファイルであり、宛先が存在しない場合は違いがあります—コマンド

rsync SRC DEST

SRCと呼ばれるDESTのコピーを作成しますが、

rsync SRC DEST/

ディレクトリDESTを作成し、SRCファイルをそのディレクトリにコピーします。

27
werkritter

ArchLinuxでrsync3.1.3を使用してテストしましたが、結果は次のとおりです。

1. rsync -avPzu test  login@remote:/home/login/test   "test" directory is copied inside of existing "test" on remote (structure is then test/test/...)
2. rsync -avPzu test  login@remote:/home/login/test/  same as above
3. rsync -avPzu test/ login@remote:/home/login/test   content of "test" directory is synchronized with the remote "test" directory
4. rsync -avPzu test/ login@remote:/home/login/test/  same as above
5. rsync -avPzu test  login@remote:/home/login/       same as above
6. rsync -avPzu test  login@remote:/home/login        same as above

この場合、受け入れられた答えとは反対に、方法3〜6が正しい方法です。

6
mak

ソースにスラッシュを保持し、宛先からスラッシュを削除します。このような:

alias syncDirectories1 = 'rsync -tvur name@Host:/Users/me/directory/ /Users/me/directory'
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@Host:/Users/me/directory'
3
Nir Levy

Ubuntu17.04で受け入れられた回答とは異なる結果が得られました。行き先/効果がないようです。次の4つのコマンドを実行しました。

rsync -av src  nslash    # No slashes on either src or dest
rsync -av src  dslash/   # Slash on Dest only  
rsync -av src/ sslash    # Slash on src only 
rsync -av src/ sdslash/  # Slash on both src and dest

結論:

  • srcに/があると、destにスラッシュがあるかどうかに関係なく、srcの内容のみがdestにコピーされます。
  • srcにスラッシュがない場合、srcとそのコンテンツはdestにコピーされます。
  • Destのスラッシュは効果がありません。
2
Fawzi Masri