同期

同期

ローカルファイル構造があります。

/tmp/24
    /dir1
        /file1
        /file2
    /dir2
        /file3
        /file4

リモートコンピューティングにアップロードしたい。私が使うとき

rsync /tmp/24 host:/target

リモートホスト(、...)targetのディレクトリ内に作成されます。/target/24/dir1/file1しかし、私はこのように使っています。

rsync /tmp/24/ host:/target

私が望むことを行います。つまり、次のように作成します/target/dir1/file1。ただし、ターゲットフォルダがすでに存在する場合は、パスで終わるかどうかscpにかかわらず最初のエントリが実行され、ターゲットフォルダが存在しない場合は2番目のエントリが実行されます。/2番目の例のように動作させるにはどうすればよいですかscprsync

ベストアンサー1

ソースディレクトリ名の後の「/」はrsyncの微妙です。それに注意を払ってください。

同期

ソースファイルの末尾にあるスラッシュは実際に「コピー」を意味します。コンテンツディレクトリ自体ではなく、そのディレクトリのディレクトリです。」末尾のスラッシュがない場合は、「ディレクトリのコピー」を意味します。

それではrsync -a tmp/24/ host:/targetコピーになります。コンテンツ「host:/target/…」に「/tmp/24/」を書き込みます。

しかし、rsync -a tmp/24 host:/targetコピーします。目次「/tmp/24/」(およびその内容)を「host:/target/24/...」に変換します。

"host:/target/" がまだ存在していなくても構いません。必要に応じて生成され、結果はどちらも同じです。

(対象の末尾のスラッシュは重要ではありません。)

┌─────────────────────────┬───────────────┬───────────────────────┐
│ rsync                   │ target exists │ target does not exist │
├─────────────────────────┼───────────────┼───────────────────────┤
│ rsync -a tmp/24 target  │ target/24/…   │ target/24/…           │
├─────────────────────────┼───────────────┼───────────────────────┤
│ rsync -a tmp/24/ target │ target/…      │ target/…              │
└─────────────────────────┴───────────────┴───────────────────────┘

SCP

スラッシュはまったく重要ではなく、ターゲットディレクトリが存在する点だけが異なります。ソースディレクトリがある場合はコピーしてください。入力する宛先ディレクトリ。それ以外の場合、ターゲットディレクトリはソースディレクトリのレプリカとして作成されます。

┌───────────────────────┬───────────────┬───────────────────────┐
│ scp                   │ target exists │ target does not exist │
├───────────────────────┼───────────────┼───────────────────────┤
│ scp -r tmp/24 target  │ target/24/…   │ target/…              │
├───────────────────────┼───────────────┼───────────────────────┤
│ scp -r tmp/24/ target │ target/24/…   │ target/…              │
└───────────────────────┴───────────────┴───────────────────────┘

したがって、あなたは正しいです。まずこれを行う必要があり、ssh host mkdir -p /target次の動作はrsyncと同じです。

しかし、なぜrsyncを使用しないのですか?部分転送、中断転送、圧縮データなど、より多くのタスクを実行できます。

rsync -azu tmp/24 host:/target

CP

完全性のために:Macでは、ターゲットがすでに存在する限り、末尾の「/」はrsyncセマンティクスを提供します。

┌──────────────────────┬───────────────┬───────────────────────┐
│ cp (Mac)             │ target exists │ target does not exist │
├──────────────────────┼───────────────┼───────────────────────┤
│ cp -a tmp/24 target  │ target/24/…   │ target/…              │
├──────────────────────┼───────────────┼───────────────────────┤
│ cp -a tmp/24/ target │ target/…      │ target/…              │
└──────────────────────┴───────────────┴───────────────────────┘

Linuxでは、scpと同様に、スラッシュはまったく重要ではありません。

┌──────────────────────┬───────────────┬───────────────────────┐
│ cp (Linux)           │ target exists │ target does not exist │
├──────────────────────┼───────────────┼───────────────────────┤
│ cp -a tmp/24 target  │ target/24/…   │ target/…              │
├──────────────────────┼───────────────┼───────────────────────┤
│ cp -a tmp/24/ target │ target/24/…   │ target/…              │
└──────────────────────┴───────────────┴───────────────────────┘

同じ上記と

追加... ditto(1) は、ディレクトリ複製のための Mac OS ツールです。できるだけ正確にコピーされます。

スラッシュはまったく重要ではありません。宛先ディレクトリがすでに存在するかどうかは重要ではありません。

┌──────────────────────┬──────────┐
│ ditto tmp/24 target  │ target/… │
└──────────────────────┴──────────┘

ターゲットがすでに存在する場合は、既存のファイルを無条件に上書きします。ソースにないファイルはターゲットに保持されます。

おすすめ記事