回答:
ディレクトリrsync
を再帰的にdest
ディレクトリの正確なコピーにするために使用する場合src
:
rsync -a src/ dest
rsync
manページには、これがどのように機能するかについて説明します。
ソースの末尾のスラッシュは、宛先で追加のディレクトリレベルを作成することを避けます。
/
ソースの末尾は、「名前でディレクトリをコピーする」のではなく、「このディレクトリの内容をコピーする」と考えることができます[...]
rsync
私が今まで使ったどのバージョンでもありません。それが実際に発生している場合、ソースディレクトリ引数の末尾にあるスラッシュが欠落しています。
dest
は機能しないようsrc
で、代わりににコピーさsrc
れsrc/src
ます。macOSでテスト済み。私は置き換えることができることを期待していたbar -> foo/
とbar/
、しかし中間の一時ディレクトリを使用する必要がありました。
dest
がへのシンボリックリンクであることがわかっている場合はsrc
、単にrm dest
上記のコマンドを実行する前に。rsync
はdest
、のコンテンツをコピーする前に作成できるほどスマートですsrc
。中間の一時ディレクトリは必要ありません。
古いファイルシステムと新しいファイルシステムの両方にマシンからアクセスできる場合は、rsyncではなくシンボリックリンクの使用を検討してください。使用しているrsyncコマンドでホストが指定されていない場合(または同じホストである場合)、これが当てはまります。同じホストで異なる名前の2つのディレクトリをミラー化しようとしています。データを複製しているため、rsyncを使用しないでください。rsyncを頻繁に実行して同期を維持する必要があります。
シンボリックリンクの使用は、2つのディレクトリ(異なる名前)をミラーリングする1回限りの修正であり、ほとんどスペースを必要としません。別のディレクトリを指すエイリアスディレクトリを作成するようなものです。
/ old / path / old_gitというディレクトリに古いgitがあり、コードリポジトリが/ new / path / new_gitに移動したとします
できるよ:
cd /old/path
rm -rf old_git (if you still have it there, get rid of it, or move it out of the way)
ln -s /new/path/new_git old_git
これにより、次のようなリンクが作成されます。
/ old / path / old_git-> / new / path / new_git
そのため、new_gitに入れられたものはすべて、データを複製することなく、また常に同期することなく、古い方法でもすぐに利用できます。
現在、代替ソリューションを見つけています。
を使用rysnc -r /origin/* /target/
すると、元のディレクトリからターゲットディレクトリにすべてのコンテンツを同期できます。
rsync -r $(find /origin -maxdepth 1 -type f) /target/
です。@RayBurgemeestreが指摘したように、シェルグロブ拡張にはドットファイルは含まれません。
src
ディレクトリの下にdest
ディレクトリが作成されます