web-dev-qa-db-ja.com

ソースから宛先にファイルを移動する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」のような別のフォルダーがある場合(サーバーBに「/ process/calc1」がすでに存在する場合)、rsyncは(サーバーBで)競合をどのように管理しますか?

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

ありがとう。

15
user44782

本当に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/

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

11
Paul Kroon

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

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

1
d-_-b