Filesystems

再次使提取的 tar 文件變小

  • January 20, 2020

我將一個文件夾打包並壓縮為 .tar.gz 存檔。打開包裝後,它幾乎是原來的兩倍大。

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

我進行了很多搜尋,發現 tar 實際上是通過添加元數據或用它做其他奇怪的事情來引起這個問題的。

我對文件夾內的 2 個文件以及 md5sum 進行了比較。絕對沒有差異,校驗和是完全相同的值。然而,一個文件是原始文件的兩倍。

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

我不是在尋找不同的方法,而是尋找一種將這些文件的大小再次減小到原始大小的方法。

我怎樣才能做到這一點?

$$ this answer is assuming GNU tar and GNU cp $$

絕對沒有差異,校驗和是完全相同的值。然而,一個文件是原始文件的兩倍。

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

.mcapm文件可能是稀疏的。創建存檔時使用-S( --sparse)選項。tar

例子:

$ 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

引用自:https://unix.stackexchange.com/questions/562919