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


55

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

これが正しい場合、フォルダーAの内容を移動するためにrsyncを使用することには、たとえばBが空のフォルダーBに利点がありますか?

フォルダーAには1TB近くのデータ(およびその中の数百万のファイル)があります。転送はローカルネットワークAB異なるファイルシステム上にあり、両方ともスーパーコンピューターにマウントされています。たとえば、ANFSでB光沢です)。

それとは別に、rsyncにファイルをAからBに移動(コピーではなく)する(つまり、転送が正常に終了しときにAを削除する)よう要求するには、どのフラグを使用する必要がありますか?


7
私はrsync置き換えることができるとは思わないmv。コピー元とコピーmv先が同じファイルシステム内にある場合、ほとんどの種類のファイルシステムではより高速になると予想されます。私が見つけることができる最も近いものはコマンドですが、それはディレクトリを削除しません。rsyncmvrsync mv--remove-source-files
jw013

2
ありがとう@ jw013!明確にするために、ファイルは異なるファイルシステム上にあり、転送はネットワーク上で行われます。それでもmv速くなるかどうか知っていますか?
アメリオバスケスレイナ

1
さて、mvネットワーク経由で操作することはできません-それはローカルマウント頼らなければならない(例えばNFS)。ボトルネックがネットワークである場合、rsyncおそらく圧縮が可能なmvためよりも高速ですrsync
jw013

2
ところでcpあり-u、それは先のファイルより新しい場合、または宛先ファイルが見つからない場合、ソースファイルをコピーするオプションを
ラッシュ

回答:


69

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

ただし、宛先が空なので、rsyncを使用しても意味がありません。平野mvはできるだけ早く仕事をします。

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


6
Calebの言うことを繰り返しますが、不安定なネットワークなどによる破損が心配な場合は、rsyncが意味をなすことがあります。
ダニエルS.スターリング

5
--remove-source-files唯一のソース内のファイルを削除します。ソースをクリアする場合、rsyncが正常に実行された後、ソースでrm -rf(またはfindすべてのディレクトリとpass -delete)を実行する必要はありませんか?
トレバーボイドスミス

1
@ DanielS.Sterling rsyncは、書き込み後にブロックをチェックサムしません(既存のファイルのどの部分が更新され、同期する必要があるかをチェックサムを使用して検出します)。2回目の同期を実行--checksumして、最初の同期の結果を検証するように指示できます。
クレメント

19

以来--remove-source-filesディレクトリを削除しません、私は次のコマンドを発行して移動するのssh経由でファイルを:

rsync -avh --progress --remove-source-files /home/user/mystuff/* user@external.server:/home/user/backup
find . -type d -empty -delete

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


3
-delete-exec rmdir {} +などよりもはるかに良いです
lkraav

1
ローカルでこれを行う場合、パスの末尾のスラッシュ/があるため、アスタリスクをスキップします。アスタリスクを使用すると、rsyncは.htaccessや.htpasswd(存在する場合)などの隠しファイルをスキップします
Svetoslav

16

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

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


5
これは大きな利点だと思います。実際、mvターゲットとソースが同じパーティションにあるmv場合にのみ、コピーを行うのではなくファイルのメタデータのみを編集する方が良いと言えます。
nomen

2
必要なのrsyncは、mvではなく、フォルダ構造を保持する場合です(使用する場合--relative)。
スリダールサルノバト

15

rsyncを使用してフォルダAのコンテンツを移動することには利点がありますか?

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

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


1

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


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.