Diğer cevaplar bana başarısız olduktan sonra bir tavşan deliğine indim ve tar sürümümün (openSUSE 42.3 OSS repo'dan 1.27.1) pax
varsayılan olarak deterministik olmayan arşiv formatını kullandığını anladım, bu bile aynı dosyalardan tar ile oluşturulan arşivler sıkıştırılmadan (ve mtime'ı açıkça ayarlayarak) farklı olabilir:
$ echo hi > test.file
$ tar --create --to-stdout test.file # long form of `tar cO test.file`
./PaxHeaders.13067/test.file0000644000000000000000000000013213427447703012603 xustar0030 mtime=1549684675.835011178
30 atime=1549684726.410510251
30 ctime=1549684675.835011178
test.file0000644000175000001440000000000313427447703013057 0ustar00hartusers00000000000000hi
$ tar --create --to-stdout test.file
./PaxHeaders.13096/test.file0000644000000000000000000000013213427447703012605 xustar0030 mtime=1549684675.835011178
30 atime=1549684726.410510251
30 ctime=1549684675.835011178
test.file0000644000175000001440000000000313427447703013057 0ustar00hartusers00000000000000hi
Sıkıştırma kullanılmamasına rağmen yukarıdaki çıkışın farklı olduğuna dikkat edin ; sıkıştırılmamış arşiv içeriği (tar aynı içerik üzerinde iki kez çalıştırılarak oluşturulur) farklıdır, bu nedenle sıkıştırılmış içerik GZIP=-n
diğer cevapların önerdiği gibi kullanıldığında bile farklılık gösterir
Bunu aşmak için şunları belirtebilirsiniz --format gnu
:
$ tar --create --format gnu --to-stdout test.file
test.file0000644000175000001440000000000313427447703011557 0ustar hartusershi
$ tar --create --format gnu --to-stdout test.file
test.file0000644000175000001440000000000313427447703011557 0ustar hartusershi
Bu, yukarıdaki gzip ile ilgili öneriyle çalışır:
# gzip refuses to write to stdout, so we'll use the `-f` option to create a file
$ GZIP=-n tar --format gnu -czf test.file.tgz test.file && md5sum test.file.tgz
0d8c7b3bdbe8066b516e3d3af60ade75 test.file.tgz
$ GZIP=-n tar --format gnu -czf test.file.tgz test.file && md5sum test.file.tgz
0d8c7b3bdbe8066b516e3d3af60ade75 test.file.tgz
# without GZIP=-n we see a different hash
$ tar --format gnu -czf test.file.tgz test.file && md5sum test.file.tgz
682ce0c8267b90f4103b4c29903c5a8d test.file.tgz
Bununla birlikte, gzip'e daha iyi sıkıştırma formatlarını tercih etmenin geçerli nedenlerine ek olarak , bunun yerine xz kullanmayı da düşünebilirsiniz (bu katran, yerine bunun yerine --xz
veya -J
bayraklarıyla da desteklenir -z
), çünkü burada size bir adım kazandırır; varsayılan davranışı xz
, sıkıştırılmamış içerikler aynı olduğunda aynı sıkıştırılmış çıktıyı oluşturmaktır, bu nedenle aşağıdaki gibi bir seçenek belirtmenize gerek yoktur GZIP=-n
:
$ tar --format gnu --xz -cf test.file.txz test.file && md5sum test.file.txz
dea99037d4b0ee4565b3639e93ac0930 test.file.txz
$ tar --format gnu --xz -cf test.file.txz test.file && md5sum test.file.txz
dea99037d4b0ee4565b3639e93ac0930 test.file.txz
touch filename
bir dosyanın değiştirilmiş zaman hangi değişiklikleri sağlama değiştirmek için yeterlidir.