How to create a tar file that omits timestamps for its contents?
GNU tar has a --mtime
argument, which can be used to store a fixed date in the archive rather than a file's actual mtime:
tar --mtime='1970-01-01' input ...
When compressing a tarball with gzip, it's also necessary to specify -n
to prevent name and timestamp of the tar archive from being stored:
tar --mtime='1970-01-01' input ... | gzip -n >input.tar.gz
To have a truly idempotent tar, mtime
is a good step but not enough.
You also need to set the sort order, the owner and group (together with their mapping) and a proper timezone for mtime
(since otherwise you're gonna have issues as well between Mac and Linux).
I ended up with
tar --sort=name --owner=root:0 --group=root:0 --mtime='UTC 2019-01-01' ... | gzip -n