如果文件列表有前导空格,为什么 tar 会在 100% CPU 时挂起

如果文件列表有前导空格,为什么 tar 会在 100% CPU 时挂起

--files-from <LISTFILE>如果使用该选项并且<LISTFILE>包含前导空格,Tar 将因 100% CPU 负载而挂起。这是为什么?

重现:给定两个任意内容的文件file1和一个包含以下内容的file2文件:list

file1
  file2

当我发出 时tar czf test.tar.gz --files-from list,该命令永远不会完成,系统负载约为 1。

如果我改变list去读书

file1
file2

上述tar命令顺利完成。

在 Ubuntu 14.04.2 LTS 服务器版本和我的 Ubuntu 14.10 桌面上都会发生这种情况;两者都有 GNU tar 1.27.1。

答案1

我已经重现了这种行为。看起来像一个错误。

我修复它降级到 tar v1.26,从这里https://packages.debian.org/wheezy/amd64/tar/download(如果您使用 Debian/Ubuntu,请下载相应的 .deb 版本并使用 dpkg -i 安装)。

答案2

我无法重现您得到的结果,尽管我可以让 tar 在执行您所描述的操作时抛出错误。

忽略这一点,在文件名之前提供带有空格的列表是不正确的;空格在 Unix 中并不是无足轻重的。如果您告诉 tar 文件名为“file2”,则 tar 会查找名为“file2”的文件,如果没有找到,则会出现错误。

如果重命名 file2:

mv file2 '  file2'

然后运行tar,就可以了。

无论哪种方式,tar 都应该出错,而不是像它在您的系统上那样崩溃。

相关内容