web-dev-qa-db-ja.com

rsyncの実行時に変更のみを表示

Macから外部ハードドライブにファイルをバックアップするためにrsyncを使用しています。例えば:

rsync -av --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"

それを行う前に、-nオプションを追加して、同じコマンドを予行演習で実行します。

rsync -avn --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"

私が理解しているように、コピー/変更される内容の違いだけが表示されますが、何らかの理由ですべてのフォルダーとファイルが印刷されます。 2つのフォルダーを使用してローカルで同じコマンドをテストすると、変更点の違いしか確認できません。なぜそうなのか、どうすれば修正できますか?

更新:

-iオプションを追加した後(学習者の回答に感謝)、すべてのファイルがリストに表示される理由を特定できました。権限がコピーされていないようです。すべてのフォルダー(およびファイル)には次のものが含まれます。

.d...p... my folder/

-p(および-o-g)オプションを追加して、権限をコピーする必要がありますが、まだうまくいきません。何か案は?

3
sash

トーマスが指摘したように、問題はハードドライブのフォーマットに関係しています(提案された解決策--chmodは機能しませんでした)。私の外部HDDはExFATで、MacのHDDはMac OS Extended。だから私はグーグルをして、解決策を見つけました ここ>>

a:アーカイブ、rlptgoDスイッチを置き換えます(再帰ディレクトリ、シンボリックリンクの保持、権限の保持、変更時間の保持、グループの保持、所有者の保持、デバイスファイルの保持)。

問題は、Linux exFATがアクセス許可に関連するスイッチ(pgo)にうまく対応しないことです。そのため、解決策は、p、g、oを削除して次のスイッチでrsyncを実行することです。

だから私の質問への答えは:

rsync -rltDvn --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"

これで、変更されたファイルのみを表示できます。助けてくれてありがとう。

3
sash

Rsyncには-iオプションがあり、--itemize-changesを表します。 rsyncのマニュアルでは、「すべての更新の変更サマリーを出力する」と記載されています。

変更されたファイルとディレクトリが表示され、ソースディレクトリからターゲットディレクトリに転送されます。また、rsyncがファイルが変更されたと想定した理由も表示されます。たとえば、ソースファイルのサイズがターゲットファイルと異なるか、タイムスタンプが異なるか、権限のみである場合などです。

例を示します。 directory1directory2を作成しました。どちらにもtextfileというファイルが含まれており、どちらのファイルにも「A」の文字が含まれています。しかし、directory1のファイルのタイムスタンプは異なります。したがって、rsync -ahzi directory1/ directory2/を実行すると、次のようになります。

.d..t...... ./
>f..t...... textfile

>は、ファイルが異なるためにローカルターゲットに転送されたことを意味します(たとえば、ファイルを192.168.1.100:/some/directoryにrsyncすると、リモートターゲットになるため、<と表示されます。 )。 fは「ファイル」を表し、tはそのファイルのタイムスタンプが異なっていたことを意味します。

次に、ファイルの内容も変更された場合はどうなりますか? 「AB」の文字が含まれるように、directory1のテキストファイルを編集しました。次に、rsync -ahzi directory1/ directory2/を実行しました。

.d..t...... ./
>f.st...... textfile

ファイルが異なるためにターゲットに転送されたことを示す>があります。 sはファイルのサイズが異なることを通知し、tはタイムスタンプも異なることを通知します。

その出力で確認できるその他の「フラグ」には、次のものがあります。

p - Permission are different
o - Owner is different
g - Group is different
a - The ACL information changed

これらすべてのフラグについて説明を得た私の情報源: http://andreafrancia.blogspot.com/2010/03/as-you-may-know-rsyncs-delete-options.html

7
Learner

考えられる問題は、外部ドライブでタイムスタンプの細分性が異なり、rsyncがそれを考慮していないことです。 --modify-window オプションを使用してこれを回避できます:

--modify-window
2つのタイムスタンプを比較するとき、rsyncはタイムスタンプがmodify_windowの値内にある場合、それらを等しいものとして扱います。これは通常ゼロですが、状況によってはこれをより大きな値に設定すると便利な場合があります。特に、1秒の解像度で時間を表現できないFATファイルシステムとの間で転送する場合、このオプションは便利です。

変更された質問の反映:--itemize-changesのビットの詳細については、 rsyncマニュアルページ を参照してください。対処する権限のみが残されています。使いやすい外付けドライブのほとんどはvfatです。Microsoftでフォーマットされているため、Unixファイルのアクセス許可は一致しません(groupotherパーミッション。また、ほとんどのアプリケーションは実行パーミッションをUnixに一致するようにマップしようとしないためです。その場合、権限をコピーできません--chmodオプションを使用して、これを回避できます(宛先で期待できる権限をrsyncに伝えるマスクを指定することにより):

--chmod
このオプションは、1つ以上のコンマ区切りの「chmod」文字列を転送中のファイルの許可に適用するようにrsyncに指示します。 結果の値は、送信側がファイルに提供した許可であるかのように扱われます。つまり、このオプションは、既存のファイルに影響がないように見えます-permsが有効になっていません。

4
Thomas Dickey