tar文件比原始文件夹大?

我使用Nautilus的“Compress”到36MB的文件夹。 它创建了一个名为fs.tar.gz的tar。

这个fs.tar.gz的大小是98MB。

这怎么可能?

我确实在某处读过符号链接或类似内容会导致这种情况 – 我的文件夹中有符号链接。

tar文件有开销,因为它还包含有关如何重新创建文件的信息。 如果您添加到tar文件本身的内容已经被压缩,那么最终可能会得到比所有文件的所有Mib更大的文件。 但是……我们正在谈论少量的开销。 不是所有文件大小的2倍。 这确实闻起来像符号链接。

你可以使用tar -tvf fs.tar.gz | more tar -tvf fs.tar.gz | more是要查看包含但不“假设”在那里的文件。 如果符号链接和文件都在用于创建tar文件的目录中,那么最终将包含这两个文件。

  • Tar有一个不存档符号链接的选项; 从手册页:

     -h, --dereference don't archive symlinks; archive the files they point to 

    在搞乱符号链接时要小心:你可能会以自己需要修复的破坏结束。

  • Tar允许使用`–exclude {PATTERN}或–exclude_from {FILE}排除文件。 这使您可以包含符号链接以及该文件并跳过文件本身。

  • 要只包含文件而不包含符号链接,可以使用find /dir1 -type f |tar {etc}

我认为在某些条件下,tarring可以产生更大的输出。 我和OP有同样的问题,处于更高的数量级。 我正在使用的文件夹是3.2K,输出tar文件是4MB – 超过原始文件大小的1000倍。

自己重现 – 我在名为playground的文件夹中创建了一百个目录,然后在每个目录中创建了26个空文件:

 $ mkdir -p playground/dir-{00{0..9},0{10..99},100} $ touch playground/dir-{00{0..9},0{10..99},100}/file{A..Z} $ tar cf playground.tar playground