フォルダをパッケージ化する前にzipファイルをrmするのは良い習慣ですか?

フォルダをパッケージ化する前にzipファイルをrmするのは良い習慣ですか?

いくつかのファイルを含むフォルダがあります。毎日バックアップする必要があります。

私はDebianとzshを使っており、zipこのツールを使ってバックアップしています。

時々フォルダを更新し、新しいファイルを追加し、古いファイルを削除し、古いファイルを更新します。

zipがzipファイルを自動的に更新できることがわかりました。たとえば、

zip -r backup.zip my-folder/初めて実行すると、すべてのファイルが追加されます。

ただし、同じコマンドを再実行すると、すべてのzip -r backup.zip my-folder/ファイルが更新されます。

信じる?それとも、rmフォルダをパッケージ化する前に毎回ファイルを圧縮する必要がありますか?

答え1

~によるとman zip

zip  will  replace identically named entries in the zip archive

したがって、実際に既存のファイルを置き換えると表示されるたびにzip似ていますが、そうではありません。以下の例を確認してください。updating: my-folder/<file> (in=0) (out=0) (stored 0%)archiveFull backupIncremental or Defferential Backup

# du -b dir/*
1073741824  dir/file.txt
2   dir/x
0   dir/xx
0   dir/xy
0   dir/y
0   dir/z


# time zip -rv dir.zip dir
  adding: dir/  (in=0) (out=0) (stored 0%)
  adding: dir/xy    (in=0) (out=0) (stored 0%)
  adding: dir/x (in=2) (out=2) (stored 0%)
  adding: dir/file.txt ......................................................................................................   (in=1073741824) (out=1042051) (deflated 100%)
  adding: dir/xx    (in=0) (out=0) (stored 0%)
  adding: dir/y (in=0) (out=0) (stored 0%)
  adding: dir/z (in=0) (out=0) (stored 0%)
total bytes=1073741826, compressed=1042053 -> 100% savings

real    0m10.990s
user    0m10.827s
sys 0m0.160s

# dd if=/dev/zero of=dir/file.txt count=1040 bs=1048576 
1040+0 records in
1040+0 records out
1090519040 bytes (1.1 GB) copied, 8.95635 s, 122 MB/s

# du -b dir/file.txt 
1090519040  dir/file.txt

これでファイルがdir/file.txt追加バイトに更新されました。それではzipもう一度やりましょう。

# time zip -rv dir.zip dir
updating: dir/  (in=0) (out=0) (stored 0%)
updating: dir/xy    (in=0) (out=0) (stored 0%)
updating: dir/x (in=2) (out=2) (stored 0%)
updating: dir/file.txt ........................................................................................................ (in=1090519040) (out=1058320) (deflated 100%)
updating: dir/xx    (in=0) (out=0) (stored 0%)
updating: dir/y (in=0) (out=0) (stored 0%)
updating: dir/z (in=0) (out=0) (stored 0%)
total bytes=1090519042, compressed=1058322 -> 100% savings

real    0m11.246s
user    0m11.021s
sys 0m0.223s

これはdir/file.txt、同じ名前の最後に変更されたファイルに置き換えられます。これは、ファイルに新しいコンテンツがない場合でも同様です。フルバックアップ、増分バックアップ、差分バックアップなど、さまざまな種類のバックアップがあります。Incremental and Differentialこれは通常、データのバックアップメカニズムが設計され実装されている場合に発生します。

この場合、@kusalanandaが述べたように、より一般的なバックアップツールの使用を検討してください。

たとえば、rsync役に立ちます。

また、毎回既存のアーカイブファイルに対してコマンドを実行するrm必要はありません。zip

持続したい場合は、zip歩いてくださいzip's add, update, freshen。実例Update:

# time zip -ruv dir.zip dir
zip diagnostic: dir/ up to date
zip diagnostic: dir/xy up to date
zip diagnostic: dir/x up to date
zip diagnostic: dir/xx up to date
zip diagnostic: dir/y up to date
zip diagnostic: dir/z up to date
updating: dir/file.txt ..........................................................................................................   (in=1111490560) (out=1078679) (deflated 100%)
total bytes=1111490562, compressed=1078681 -> 100% savings

real    0m11.351s
user    0m11.178s
sys 0m0.171s

再実行する場合zip:

# time zip -ruv dir.zip dir
zip diagnostic: dir/ up to date
zip diagnostic: dir/xy up to date
zip diagnostic: dir/x up to date
zip diagnostic: dir/file.txt up to date
zip diagnostic: dir/xx up to date
zip diagnostic: dir/y up to date
zip diagnostic: dir/z up to date

real    0m0.003s
user    0m0.002s
sys 0m0.001s

関連情報