我正在使用tar备份目录。某些文件/目录last-modified-time将被更新,但内容仍然存在。如果目录文件的内容没有被修改,我想得到一个带有二进制文件的 tarball。
但是,只要last-modified-time更新,生成的 tarball 的二进制文件就会不同。
有没有办法让tarignore last-modified-time?这样只要内容不更改,我就可以获得相同的二进制文件。
看来您不仅要在 TAR 中寻找固定的 mtime,还要在文件本身相同的情况下寻找逐位相同的 tarball。这实际上比人们想象的要复杂。
根据您的情况,并非所有要点都相关,但为了完整起见,我将它们列在此处。在 GNU tar 中,您可以执行以下操作:
--mtime=<date>. 从 1.29 版开始(在 Debian 1.28-1 上,您可以使用--clamp-mtime仅为文件 /newer/ 比给定的 mtime 设置文件的实际 mtime。这很有用,当您想为生成的文件提供一个通用时间戳,但离开单独的其他文件。--sort=name(GNU tar 1.28 或更高版本)。默认行为是--sort=none,它按目录顺序存储文件。--owner=0 --group=0 --numeric-owner 设置所有者(如果您从不同的用户创建 TAR)。chmod在创建存档之前使用或使用--mode=<CHANGES>更改它们以保持一致。Reproducible Builds 计划中有一篇关于生成逐位相同档案的好文章。
本文还为较旧的 tar 版本提供了一些变通方法,这些方法也可能适用于其他 TAR 实现。专门针对 mtime 的解决方法是,您可以touch在创建 TAR 之前使用它为所有比某个日期新的文件将 mtime 设置为固定值。对于存档中的可预测顺序,使用find并将sort有序文件列表传递给 TAR。
find build -print0 | LC_ALL=C sort -z
| tar --no-recursion --null -T - -cf product.tar
Run Code Online (Sandbox Code Playgroud)
有关各个选项的信息,请参阅GNU TAR 文档和联机帮助页。