web-dev-qa-db-ja.com

rsyncを使用して、ディレクトリ間でファイルを(コピーではなく)移動しますか?

私はしばらくの間rsyncを使用してファイルをコピーしています。私の理解では、rsynccpよりも高速で、転送先はすでに宛先ディレクトリにあり、差分の差分(「デルタ」)のみを転送します。

これが正しい場合、rsyncを使用してフォルダの内容を移動することには利点がありますか[〜# 〜] a [〜#〜]、つまり、フォルダ[〜#〜] b [〜#〜][〜#〜] b [〜#〜]は空ですか?

フォルダー[〜#〜] a [〜#〜]には、1 TBに近いデータ(およびその中の数百万のファイル)があります。転送はローカルネットワーク)[〜#〜] a [〜#〜]および[〜#〜] b [〜#〜]がオン異なるファイルシステム、両方マウント、スーパーコンピューター、例えば[〜#〜] a [〜#〜]is [〜#〜] nfs [〜#〜] and[〜#〜] b [ 〜#〜]is lustre )です。

それとは別に、どのフラグを使用してrsyncからファイルを移動する(コピーしない)かを尋ねる必要があります[〜# 〜] a [〜#〜]to[〜#〜] b [〜#〜](つまり削除[〜#〜] a [〜#〜]転送が正常に完了したとき)?

62

--remove-source-files rsyncを使用して、ファイルをコピーする代わりに移動します。

しかし、あなたの場合、宛先が空であるため、rsyncを使用しても意味がありません。単純なmvは、できるだけ速く処理を実行します。

あなたの場合、NFS、Samba、sshfs、sftp、sshを介したrsync、sshにパイプされたtarなどの選択肢がある場合、パフォーマンスに影響を与える可能性があるのはネットワークプロトコルの選択です。これらの方法の相対的な速度は、ファイルサイズ、ネットワークとディスクの帯域幅、その他の要因については、一般的なアドバイスをする方法がないため、独自のベンチマークを実行する必要があります。

--remove-source-filesはディレクトリを削除しないため、次のコマンドをssh経由でmoveファイルに発行します。

rsync -avh --progress --remove-source-files /source/* user@server:/target \
&&  find /source -type d -empty -delete

この転送は手動で行うので、個人的には--progress機能が好きです。スクリプトを使用している場合は削除してください。転送がわずかに遅くなると思います。 findコマンドの削除オプションは空のディレクトリのみを削除します。rm -rfは使用しないでください。ファイルが転送されなかった場合に空でないディレクトリが削除される可能性があります。 -deleteオプションは-depthオプションをオンにして、空のディレクトリツリーが「下」から削除されるようにします。

23
Kristian

一般に Gillesが言ったようにrsyncが同じジョブをより簡単に実行し、通常の間に潜在的な速度の向上がない場合、mvを使用してファイルを移動する利点はありませんファイルシステム。

ただし、利点がある場合もあります。特に、ソース、宛先、または作業を行っているマシンの安定性に疑問がある場合は、rsyncを使用すると再開できます。これは、転送が非常に大きく、たとえば、電力グリッドが信頼できない場合に、顕著な利点となります。 rsyncを使用すると、障害発生時にデータの破損を回避し、中断したところから再開するより安定した方法になります。

17
Caleb

rsyncを使用して、フォルダーAの内容、たとえばフォルダーBを移動し、Bを空にするとどのような利点がありますか?

Rsync IS mvはディレクトリ内のファイル数を処理できないため、mvよりも高速な状況にあります。20日間実行されたセキュリティカメラからの写真が180万枚ありますまた、mvコマンドはリソースを割り当てることができないため、失敗して終了します。

ただし、rsyncはすべてのファイルを問題なく処理するようです。

16
shadowv

ディレクトリを再帰的にマージしたい場合...あるディレクトリを別のディレクトリに移動し、重複する可能性がありますディレクトリ名。serverfault.comで私の回答 ここ を参照してください。 mvは、同じ名前のディレクトリが存在する場合はうまく機能せず、rsyncはファイルを移動するだけでなく(メタデータの読み取りと書き込みのみ)、すべてのファイルをコピー(読み取り+完全なデータの書き込み)します。

2
Peter

Linuxのmvコマンドのように実際にrsyncを使用してファイルを移動する方法はありません。 --remove-source-filesを使用すると、基本的にファイルを宛先にコピーしてから、ソースからファイル(ディレクトリを除く)を削除します。これでファイルを移動する目的は達成できますが、時間やI/O操作を節約することはできません。

0