重複することなく2つのフォルダを安全に同期する方法


0

私はメガのアカウントを持っており、私は自分のコンピュータ上のフォルダとそれを同期させたいのです。問題は、このアカウントがある程度一般公開されているため、使用できないことです。 rsync--delete 万が一誰かがすべてのファイルを削除した場合。

可能だと思いました rsync 何も削除せずにすべてのファイルを自分のコンピュータに移動してから、コマンドを使用して重複ファイル(別のディレクトリにファイルを移動したユーザーなど)を見つけます。 find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35- そして最新版だけを保ってください。

しかし私が間違えていなければファイルの作成の時間はコピーの後に残されます。データは主に変更されない画像とpdfファイルで構成されているので、それは残念です。

コピーしたファイルを(のみ)に渡す方法はありますか touch 例えば、この問題を解決するためのもっと良い方法はありますか?

回答:


1

あなたが言った :

しかし私が間違えていなければファイルの作成の時間はコピーの後に残されます。

常にではない。

あなたがファイルとディレクトリをコピーするとき、あなたは修正時間を保存することができます。
例えば cp -rp 時間の創造、所有権を維持する…(から man cp ):

-a、 - archive -dRと同じ--preserve = all
-p --preserve = mode、ownership、timestampsと同じです。


同じように rsync -t 変更時刻を保存する(今回は man rsync ):

-t 、--times 修正時間を保存する

通常 rsync と一緒に使用されます -avr 暗黙のうちにそうオプション -t つかいます。

-a アーカイブアーカイブモード。 -rlptgoDと同じ(no -H、-A、-X)


では、rsync(-tなし)を使用して、そのコマンドで生成されたリストから古いファイルを削除できますか?
Kostrahb

私はあなたが欲しいものが少し不明瞭です。ところであなたが初めてコピーするなら cp -rp または scp -rp これは創造の時間を節約するでしょう。あなたがrsyncなら rsync -avr あなたは再び時間を保存しながら、新しいものだけを更新するでしょう。いくつかのファイルを削除する必要がある場合は、そこには存在しません 受信側(送信側にないもの) あなたはオプションを使用することができます rsync -avr --delete。しかし、あなたがDRY RUNで何をしているのか注意深くチェックしてください( -n )前(使用中) rsync -avr --delete -n そして、あなたがすべて正しく書いたことを確認するためにローカルテストを行います。
Hastur

誰かが何かを削除した場合(アカウントは共有される可能性があります)に備えてすべてのファイルを保持したいのですが、他の誰かがファイルをツリー内の別の場所に移動しただけの場合
Kostrahb

わかりました私はあなたにこの戦略を提案します:きれいな同期コピーから始めてください( scp -rp ... 今日は言いましょう。次に、ローカルファイル用のmd5チェックサムの番号付きリストを作成します。やめる。明日(アップデートを確認するとき)、rsync -a --list-only ... ...を使ってDRY RUNを実行します。出力を解析して、リモートパス上のリモートファイルのmd5sumを再実行するリストを作成します。それから、ファイルを更新する2つのリストとローカルのmd5sumリストに取り組んでください。問題を回避するためにLOCKメカニズムを作成することをお勧めします。
Hastur
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.