0

rsync のようにファイル システム間でファイルを同期するプログラムを作成していますが、パッケージの処理に関して行き詰まっています。これらは、一貫した一連のファイルを含むものとしてシステムによって識別されるフォルダーです。Pages と Numbers はモノリシック ファイルではなくパッケージを使用でき、たとえばアプリケーションは実際にはパッケージです。私の問題は、最新バージョンを保持し、バックアップ コピーも保持したいということです。私が見る限り、2つのオプションがあります-

  1. 全体を通常のフォルダとして扱い、内容をエントリごとに処理できます。
  2. すべてのコンテンツのすべての変更日を確認し、最後に変更されたコンテンツを含む完全なフォルダー ツリーを保持できます。

私は (2) を目指していましたが、iPhoto ライブラリが実際にはパッケージとして保存されていることがわかりました。つまり、1 つの写真だけが変更されたとしても、ライブラリ全体 (数十ギガバイト、場合によっては数百ギガバイト) をコピーすることになります。

(1) に関する私の懸念は、コンテンツ ファイルを個別に処理すると問題が発生する可能性があることです。私は、パッケージが機能し、場合によっては不必要に大きなバックアップ ファイルを必要としないことを保証する優れた解決策を思いつきませんでした。それが単なる iPhoto の場合は、おそらく特別なケースに入れたり、パッケージがユーザー指定の制限よりも大きい場合は戦略を変更したりできます。

パッケージは驚くほど不思議で、システムがパッケージとして扱うのは、フォルダに拡張属性を設定するだけではないようです。

4

1 に答える 1

0

「バックアップ」バージョンをどのように扱うかによって異なります。各ファイルの 2 つのバージョン (現在と最初の前のバージョン) を保持していますか、それとも同期スナップショットの 2 つのバージョンを保持していますか (つまり、ファイルが最後の 2 つの同期間で変更されていない場合、1 つのバージョンのみを保存します)?

同期の 2 つのバージョンの場合、パッケージは大きな問題にはなりません。「バックアップ」バージョンを復元する方法を提供するだけです。必要に応じて、「バックアップ」から変更されたファイルと現在の変更されていないファイルをつなぎ合わせます。同期します。ただし、注意すべき点がいくつかあります。2 つのスナップショット間で削除または追加されたファイルを正しく処理するようにしてください。

各ファイルの 2 つのバージョンを保存している場合、事態はさらに複雑になります。パッケージ内のファイルのどのバージョンが「一緒に」使用されるかを記録する何らかの方法が必要です。この場合、パッケージ内の何かが最後に変更されたときから、パッケージ内のファイルのバックアップ バージョンのみを保存したくなると思います。たとえば、preso.key というパッケージを同期するとします。2 回目の同期では、preso.key/index.apxl.gz と preso.key/splash.png が変更されるため、これら 2 つのファイルの古いバージョンがバックアップに保存されます。3 回目の同期では、 preso.key/index.apxl.gz が再び変更されるため、その新しいバックアップ バージョンを保存し、preso.key/splash.png のバックアップ バージョンを削除します。

ところで、スペースを節約する別の方法はハードリンクです。スペースを無駄にすることなく大きなパッケージの 2 つの「完全な」バージョンを保存したい場合は、変更されていない各ファイルのコピーを 1 つ保存し、それを両方のバックアップにハードリンクします。

于 2013-01-22T20:18:02.480 に答える