
次のコマンドを使用して、あるディレクトリの内容を別のディレクトリに完全に再帰的にコピーします。
rsync -avzhe /path1/to1/dir1/* /path2/to2/dir2/
期待どおりに動作しますが、ディレクトリまたはファイルの最初のファイル (アルファベット順) がコピーされません。他のすべてのファイルはコピーされます。なぜでしょうか?
私の OS は MacOS 10.14.6 です。
答え1
この-e
オプションには引数が必要なので、最初のファイル名を使用します。リモートに接続するために使用するコマンドを設定するのに、リモートを使用していないのに、なぜ必要なのかわかりません-e
。 を削除するだけです-e
。
答え2
/path1/to1/dir1
というディレクトリの完全なコピーを作成するには/path2/to2/dir2
、
rsync -av /path2/to1/dir1/ /path2/to2/dir2
-z
ローカル コピーに圧縮 ( ) を使用する意味はありません。-e
オプションは、ネットワーク接続を確立するために使用されるコマンドを指定します (これが、コマンドが最初のファイルのコピーに失敗し、rsync
オプションのオプション引数として使用される理由です-e
)。したがって、このシナリオでは、これも削除する必要があります。
*
また、ソース パスの末尾に を使用しないでください。通常は、非表示の名前dir1
と一致しません。その下のすべての名前をグロブすると、リストが長くなりすぎて、コマンドがまったく実行できなくなる可能性があります。
ソース パスがスラッシュで終わっていることを確認してください。宛先パスの末尾にスラッシュがあっても違いはありません。ソース パスからスラッシュを削除すると、 のdir1
内部がコピーされますdir2
。ソース パスの末尾にスラッシュがあると、dir2
のコピーが作成されますdir1
。
それ以外にも、-H
ハードリンクが宛先で正しく確立されていることを確認する場合や、--sparse
スパースである可能性があるファイル (事前に割り当てられたディスク イメージなど) をコピーしていることがわかっている場合に、使用することもできます。
使用--delete
するには消去ソース ファイル階層の一部ではない宛先からのエントリ。これは注意して使用してください。最初に-n
( --dry-run
) でテスト実行することをお勧めします。