Linuxのコマンドラインから、そのフォルダにまだ存在していない別のサーバーのリモートフォルダにファイルのみをコピーする方法は?

Linuxのコマンドラインから、そのフォルダにまだ存在していない別のサーバーのリモートフォルダにファイルのみをコピーする方法は?

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

AとBの間でファイルを同期したいのですが、ファイルサイズが大きいので、Bフォルダにまだ存在していないファイルだけをコピーしたいと思います。ファイルの更新には興味がありません。 Bフォルダ内のすべてのファイルのコピーが必要です。

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

答え1

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

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

さまざまなアップデートを実行することもできます。マンページを確認してください。

答え2

を使用rsyncして--ignore-existing既存のファイルを更新しないかどうかを指定します。

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

私が一般的に追加する人気のある追加オプションは、--progress何が起こっているのかを知らせることです。休憩を期待すればそれも大丈夫ですが--partial、転送中に途切れると「部分」と「既存の無視」がどのように混在するのかよくわかりません。

答え3

これはほぼ成功できるトリックただし、このトリックは同じサーバー上のフォルダにコピーした場合にのみ機能します。以下は含まれているリンクの関連コンテンツです。

[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を送信する必要はありません。to /dev/null - そうしないと、結果は、コピーコマンドがまだ存在しないファイルのみをターゲットディレクトリにコピーし、両方のディレクトリにあるファイルをスキップすることです(技術的には。コピーコマンドは実行されませんが、実行するとアクションが実行されます.)

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

関連情報