Is there a way to create a .tar
file that omits the values of atime/ctime/mtime for its files/directories?
We have a st
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
We can create the tar file without timestamp appending to it.
1) Create tar file without compression and timestamp
tar -cf file_name.tar file_name
2) Create tar file with compression and without timestamp
tar -cf file_name | gzip -n > file_name.tar.gz
3) Alternate way
GZIP=-n tar -czf file_name.tar.gz file_name
Note: '-n' will not add timestamp and name
4) To extract tar file
tar -xf file_name.tar and tar -xzf file_name.tar.gz
To verify you can do like this
file file_name.tar or file_name.tar.gz
output = file_name.tar.gz: gzip compressed data, from Unix