我运行了一个测试,从同一个目录创建了两个 tars(它的文件保持不变),我发现它们的 md5sums 是不同的。我假设 tar 的标头中包含一些时间戳,但我还没有找到覆盖它的方法。我的操作系统是 Ubuntu 9.1。有任何想法吗 ?
谢谢。
Jef*_*der 16
正如丹尼斯在上面指出的那样,它是 gzip。gzip 标头的一部分是文件中压缩的任何内容的修改时间。如果您需要 gzip,您可以将 tarfile 压缩为 tar 之外的额外步骤,而不是使用 tar 的内部 gzip。gzip 命令有一个标志来禁止保存修改时间。
tar -c ./bin |gzip -n >one.tgz
tar -c ./bin |gzip -n >two.tgz
md5sum one.tgz two.tgz
Run Code Online (Sandbox Code Playgroud)
这不会影响 tarfile 中的时间,只会影响 gzip 标头中的时间。
小智 7
要制作具有一致校验和的 tar 文件,只需GZIP=-n
像这样添加:
GZIP=-n tar -zcf myOutputTarball.tar /home/luke/directoryIWantToZip
Run Code Online (Sandbox Code Playgroud)
这是如何工作的: Tar 可以使用临时GZIP
环境变量接受 gzip 选项,如上所述。就像 Valter 所说,tar 使用 gzip,默认情况下它会在存档中放置一个时间戳。这意味着当您压缩相同的文件时,您会得到不同的校验和。该-n
选项禁用该时间戳。
小智 5
我也有这个问题,要让 gzip 不改变时间戳,请使用 gzip -n
-n, --no-name 不保存或恢复原始名称和时间戳
[valter.silva@alog ~]$ gzip --help
Usage: gzip [OPTION]... [FILE]...
Compress or uncompress FILEs (by default, compress FILES in-place).
Mandatory arguments to long options are mandatory for short options too.
-c, --stdout write on standard output, keep original files unchanged
-d, --decompress decompress
-f, --force force overwrite of output file and compress links
-h, --help give this help
-l, --list list compressed file contents
-L, --license display software license
-n, --no-name do not save or restore the original name and time stamp
-N, --name save or restore the original name and time stamp
-q, --quiet suppress all warnings
-r, --recursive operate recursively on directories
-S, --suffix=SUF use suffix SUF on compressed files
-t, --test test compressed file integrity
-v, --verbose verbose mode
-V, --version display version number
-1, --fast compress faster
-9, --best compress better
--rsyncable Make rsync-friendly archive
With no FILE, or when FILE is -, read standard input.
Report bugs to <bug-gzip@gnu.org>.
Run Code Online (Sandbox Code Playgroud)
例子:
[valter.silva@alog ~]$ ls
renewClaroMMSCanaisSemanal.log.gz s3
[valter.silva@alog ~]$ gunzip renew.log.gz
[valter.silva@alog ~]$ gunzip s3/renew.log.gz
[valter.silva@alog ~]$ md5sum renew.log
d41d8cd98f00b204e9800998ecf8427e renew.log
[valter.silva@alog ~]$ md5sum s3/renew.log
d41d8cd98f00b204e9800998ecf8427e s3/renew.log
[valter.silva@alog ~]$ gzip -n renew.log
[valter.silva@alog ~]$ gzip -n s3/renew.log
[valter.silva@alog ~]$ md5sum renew.log.gz
7029066c27ac6f5ef18d660d5741979a renew.log.gz
[valter.silva@alog ~]$ md5sum s3/renew.log.gz
7029066c27ac6f5ef18d660d5741979a s3/renew.log.gz
Run Code Online (Sandbox Code Playgroud)