web-dev-qa-db-ja.com

Linuxのコマンドラインから、フォルダにまだ存在していない別のサーバー上のリモートフォルダにのみファイルをコピーするにはどうすればよいですか?

2つの異なるサーバーに2つのフォルダーがあります。

AとBの間でファイルを同期したいのですが、これらのファイルは巨大であるため、フォルダーBにまだ存在していないファイルのみをコピーしたいと思います。ファイルの更新は気にしません。フォルダBにそれぞれのコピーが欲しいだけです。

Linuxでこれを行うにはどうすればよいですか? (変更されたファイルを更新する方法を知っているといいと思います)

5
T. Brian Jones

rsyncはこれを行うことができます。

rsync --ignore-existing <src> <dest>

さまざまな更新も実行できます。 manページをご覧ください。

10
phlogratos

rsyncを使用し、既存のファイルを更新しない場合は--ignore-existingを指定します。

rsync -e ssh -av --ignore-existing /my/source/directory [email protected]:/data/

私が通常追加する人気のある追加オプションは--progressなので、何が起こっているかがわかります。中断が予想される場合は、--partialとも言いますが、送信中に切断された場合に「部分的」と「既存を無視」がどのように混在するかはわかりません。

5
Kerrek SB

これが ほとんどこれを行うトリック ですが、このトリックは、同じサーバー上のフォルダーにコピーしている場合にのみ機能します。以下は、含まれているリンクからの関連コンテンツです。

[jonesy@cranford testing]$ ls
bar  foo

[jonesy@cranford testing]$ ls foo
1  2  3

[jonesy@cranford testing]$ ls bar
1  2  3  4  5  6

[jonesy@cranford testing]$ yes n | cp -i bar/* foo 2>/dev/null

[jonesy@cranford testing]$ ls foo
1  2  3  4  5  6

[jonesy@cranford testing]$ ls bar
1  2  3  4  5  6

「ターゲットディレクトリにすでに存在するファイルを上書きするかどうかを尋ねる「cp-i」コマンドに定数「no」をパイプしています。STDERRをに送信する必要はありません。/dev/null —存在しない場合、出力が乱雑になります。最終的に、copyコマンドは、ファイルがまだ存在しない場合にのみ、コピー先ディレクトリにファイルをコピーします。両方のディレクトリに存在するファイルをスキップします。 (技術的には、copyコマンドは実行されませんが、この方法で実行すると操作は実行されます)。

「もちろん、ディレクトリの内容を強制的に上書きすることはできますが、両方のディレクトリに存在するファイルが同一であるかどうかはわかりません。または、一方を横に移動してもう一方を所定の位置に移動することもできますが、同じ問題が存在します。」

1
T. Brian Jones