web-dev-qa-db-ja.com

ディレクトリを別の名前の新しいディレクトリにrsyncする方法は?

私はデータ転送を行っています。古いファイルシステムは、別のパスにあるディレクトリに深く依存しています。これはコードをオンラインで保存するgitディレクトリです。移動したり名前を変更したりする権利はありません。

したがって、私ができることは、このディレクトリを同じ古いパスにrsyncすることです。ただし、ディレクトリ名も変更されました。

ディレクトリを別の名前のターゲットディレクトリにrsyncする簡単な方法はありますか?

55
Zen

rsyncを再帰的に使用してdestディレクトリをsrcディレクトリの正確なコピーにする場合:

rsync -a src/ dest

rsyncのmanページに、この仕組みが説明されています。

ソースの末尾のスラッシュ[...]は、宛先に追加のディレクトリレベルを作成しないようにします。ソースの末尾の/は、「名前でディレクトリをコピーする」ではなく「このディレクトリの内容をコピーする」という意味と考えることができます[...]

96
Adrian

古いファイルシステムと新しいファイルシステムの両方がマシンにアクセスできる場合は、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に入れられたものはすべて、データを複製することなく、また常に同期する必要なく、古い方法でもすぐに利用できます。

1
jrel

今、別の解決策を見つけました。

rysnc -r /Origin/* /target/を使用すると、Originディレクトリからターゲットディレクトリにすべてのコンテンツを同期できます。

0
Zen