rsync を使用してファイルをソースから宛先に移動しますか?

rsync を使用してファイルをソースから宛先に移動しますか?

私のプロジェクトにとって rsync は良い選択でしょうか?

次の操作を行う必要があります。
- SSH 経由でソース フォルダーから宛先フォルダーにファイルをコピーする。
- すべてのファイルがコピーされたことを確認する。
- コピー後にソース ファイルを削除する。
- 名前が競合する場合は、ファイルの名前を変更する必要があります。

オプション --remove-source-files (ソース ファイルを削除する) を使用できるようです
が、rsync は競合をどのように管理し、ルールを設定できますか?

私のプロジェクトでの使用例:

サーバー A で科学計算を実行し、結果はフォルダー「process」に挿入されます。計算ごとに、次のようなリポジトリがあります: /process/calc1。
ここで、リポジトリ「/calc1」をサーバー B に転送し (/process/calc1 を取得)、サーバー A から「calc1」を削除します。...
別の計算中に、サーバー A で「/process/calc2」を取得します。このアイデアは、サーバー B の「/process/」ディレクトリに「calc2」を移動することです。すると、サーバー B に次のものが存在するようになります:
- /process/calc1
- /process/calc2
(サーバー A の /process/ は空)。

新しい計算の後にサーバー A に「/process/calc1」のような別のフォルダーがある場合 (「/process/calc1」がサーバー B にすでに存在する場合)、rsync は (サーバー B 上の) 競合をどのように管理しますか?

rsync を使用してルールを追加し、サーバー B で「/process/calc1」の名前を「process/calc1R2」に変更することは可能ですか? など (例:calc1R3)?

ありがとう。

答え1

本当にrsyncを使いたいのであれば、--backup、--backup-dir、--suffixの組み合わせが必要になるようです。一番近いのは次のようなものだと思います。

rsync -abv --suffix R1 --remove-source-files src/ dst/

これは、ほぼ希望どおりに機能しますが、ファイル名は希望どおりに変更されません。 --suffix オプションは、既存のファイルの末尾にテキストを追加しますが、これは最初の競合に対してのみ行われます。再度実行すると、最初のバックアップが上書きされます。コマンドを実行するたびにサフィックス値を変更する必要がありますが、次のようにタイムスタンプ付きのものを使用すれば機能します。

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

これがあなたの求めているものに対して過剰であるかどうかはわかりませんが、要件を満たすはずです。

答え2

名前が示すように、rsync はファイルの同期に使用されます。「同期」とは、ソースと宛先のファイルが同じであることを意味します。これは、あなたがやりたいことではないようです。

いくつかのファイルを移動したいだけのようですね。そのために rsync を使用する必要はありません。Linux または BSD を使用しているようです。ssh 経由で mv -n を使用できます。-n オプションは既存のファイルを上書きしません。これは 100% 自動ではありません。ただし、ファイルがすでに存在する可能性があるとは思えません。ファイルはソースから宛先にコピーされ、ソースから削除されます。同じ計算をもう一度実行しますか? そのため、同じ名前のファイルが作成されますか? フォルダー名に実行番号またはバッチ番号を追加することをお勧めします。いずれにしても、それを明確にする必要があります。フォルダーの名前の付け方を制御できますか? 詳細は? コマンドを bash スクリプトなどに配置することをお勧めします。

答え3

SSH の場合、要約すると、次のようにします。

リモートシェル経由でアクセス:

プル: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

プッシュ: rsync [OPTION...] SRC... [USER@]HOST:DEST

すべてrsync(1)で説明されています。

cronjob のスクリプト化に関しては、パスワードを要求せずに ssh 経由で自動的に rsync を実行するには、ssh-agent(1) も調べてください。

関連情報