rsyncに似たアーカイブファイルの更新

rsyncに似たアーカイブファイルの更新

更新バックアップを使用すると、rsync --include-from=files --exclude-deleted次のようなフィードバックを得ることができます。

Added file: new.file
Added file: other.file
Deleted file: deleted.file
etc.

標準のUNIXアーカイブツール(zip、tarなど)を使用して同じ目的を達成できますか?アーカイブに新しいファイルが追加され、削除されたファイルは削除されますか?

たとえば、zip -ru@ out < filesインクルードリストに基づいてアーカイブを更新しますが、削除されたファイルがある場合いいえ削除されました。したがって、アーカイブには残りのゴミがたくさん残っています。

もちろん、アーカイブを削除して全体を再作成することはできますが、すべてのファイルが追加されたことを示す数千行の出力が得られるので、言えば「増分」出力は得られません。

(追加の質問は、インクルードファイルにワイルドカードベースのファイルを含める方法ですが、別の質問に適している可能性があります。)

ベストアンサー1

zipのオプションが利用可能です--filesync

~から郵便番号(1)マニュアルページ:

-FS

--ファイル同期 アーカイブされたコンテンツをオペレーティングシステムのファイルと同期します。通常、アーカイブを更新すると、新しいファイルが追加され、変更されたファイルは更新されますが、オペレーティングシステムに存在しなくなったファイルはアーカイブから削除されません。このオプションを使用すると、ファイルシステムのアーカイブ内のエントリを確認する新しいモードを使用できます。エントリのファイル時間とファイルサイズがオペレーティングシステムファイルのファイル時間とファイルサイズと一致する場合、そのエントリはファイルシステムから読み取られ、圧縮されるのではなく古いアーカイブからコピーされます。オペレーティングシステムファイルが変更された場合は、通常どおりエントリを読み込んで圧縮します。アーカイブのエントリがオペレーティングシステムのファイルと一致しない場合、エントリは削除されます。このオプションを有効にすると、新しいアイテムと同じアーカイブが作成されますが、既存のアイテムは圧縮されずにコピーされるため、既存のアーカイブは次のように更新できます。-FS新しいプロファイルを作成するよりもはるかに高速です。また、使用を検討することができます- ゆうファイルを更新するために使用されます。このオプションが機能するには、相対パスが一致するようにアーカイブが作成されたのと同じディレクトリでアーカイブを更新する必要があります。古いアーカイブからコピーされたファイルがほとんどない場合は、新しいアーカイブを作成する方が速くなる可能性があります。このオプションを正しく機能させるには、タイムゾーン環境変数TZをローカルタイムゾーンに従って設定する必要があります。元のアーカイブが作成されてからタイムゾーンが変更されると、すべてのファイルの時刻の一致と再圧縮が失敗する可能性があります。

このオプションはアーカイブからファイルを削除します。元のアーカイブをアーカイブする必要がある場合は、まずアーカイブのコピーを作成するか、- 出る更新されたアーカイブを新しいファイルに出力するオプション。遅くなる可能性がありますが、新しいアーカイブ名で新しいアーカイブを作成することは、アーカイブとオペレーティングシステムのパス間の矛盾を防ぐために、より安全で優先されます。

例:

user@host:~/$ mkdir compressme; echo "Lorem Ipsum" >compressme/file1; echo "Lorem Ipsum" >compressme/file2; echo "Lorem Ipsum" >compressme/file3
user@host:~/$ zip -r --filesync all.zip compressme
  adding: compressme/ (stored 0%)
  adding: compressme/file2 (stored 0%)
  adding: compressme/file1 (stored 0%)
  adding: compressme/file3 (stored 0%)
user@host:~/$ rm compressme/file2
user@host:~/$ zip -r --filesync all.zip compressme
updating: compressme/ (stored 0%)
deleting: compressme/file2

おすすめ記事