我有一个包含一些文件的文件夹。我需要每天备份它们。
我正在使用 Debian 和 zsh,并使用zip
该工具来备份它们。
我不时更新文件夹,添加新文件,删除旧文件并更新旧文件。
我注意到 zip 可以自动更新 zip 文件。例如:
当我zip -r backup.zip my-folder/
第一次运行时,它会添加所有文件。
但是当我再次运行相同的命令时zip -r backup.zip my-folder/
,它将更新所有文件。
那可靠吗?或者我rm
每次打包文件夹之前都需要 zip 文件吗?
答案1
根据man zip
zip will replace identically named entries in the zip archive
因此,每当zip
说它updating: my-folder/<file> (in=0) (out=0) (stored 0%)
实际上替换了 中的现有文件时archive
,这就像 aFull backup
但不是Incremental 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