抽出されたtarファイルをもう一度小さくします。

抽出されたtarファイルをもう一度小さくします。

フォルダを.tar.gzアーカイブに圧縮しました。開梱すると、体積はほぼ2倍になります。

du -sh /path/to/old/folder       = 263M
du -sh /path/to/extracted/folder = 420M

私はたくさん検索した結果、tarが実際にメタデータを追加したり、他の奇妙な操作を実行することによってこの問題を引き起こすことがわかりました。

md5sumだけでなく、フォルダ内のファイル2つを比較しました。まったく違いはなく、チェックサムはまったく同じ値です。ただし、1つのファイルサイズは元のファイルサイズの2倍です。

root@server:~# du -sh /path/to/old/folder/subfolder/file.mcapm /path/to/extracted/folder/subfolder/file.mcapm
1.1M    /path/to/old/folder/subfolder/file.mcapm
2.4M    /path/to/extracted/folder/subfolder/file.mcapm
root@server:~# diff /path/to/old/folder/subfolder/file.mcapm /path/to/extracted/folder/subfolder/file.mcapm
root@server:~# 
root@server:~# md5sum /path/to/old/folder/subfolder/file.mcapm
root@server:~# f11787a7dd9dcaa510bb63eeaad3f2ad
root@server:~# md5sum /path/to/extracted/folder/subfolder/file.mcapm
root@server:~# f11787a7dd9dcaa510bb63eeaad3f2ad

私は他のアプローチを探しているのではなく、これらのファイルのサイズを元のサイズに戻す方法を探しています。

どうすればいいですか?

ベストアンサー1

[この回答はGNU tarとGNU cpを想定しています。]

まったく違いはなく、チェックサムはまったく同じ値です。ただし、1つのファイルサイズは元のファイルサイズの2倍です。

1.1M    /path/to/old/folder/subfolder/file.mcapm
2.4M    /path/to/extracted/folder/subfolder/file.mcapm

ファイル.mcapmは次のようになります。足りない。アーカイブを作成するときは-S()オプションを使用してください--sparsetar

例:

$ dd if=/dev/null seek=100 of=dummy
...
$ mkdir extracted

$ tar -zcf dummy.tgz dummy
$ tar -C extracted -zxf dummy.tgz
$ du -sh dummy extracted/dummy
0       dummy
52K     extracted/dummy

$ tar -S -zcf dummy.tgz dummy
$ tar -C extracted -zxf dummy.tgz
$ du -sh dummy extracted/dummy
0       dummy
0       extracted/dummy

後で、次のようにファイルを「再度スパース」することもできますcp --sparse=always

$ dd if=/dev/zero of=junk count=100
...
$ du -sh junk
52K     junk
$ cp --sparse=always junk junk.sparse && mv junk.sparse junk
$ du -sh junk
0       junk

おすすめ記事