tar命令创建目录没有777权限

tar命令创建目录没有777权限

我在提取 tar 文件时遇到错误,创建的目录是使用 chmod 666 而不是 777 创建的。因此它不会提取到该文件夹​​内。

这是我的命令:

$umask 000 && tar -xvzf compress.tgz
tar: dist/assets: Cannot mkdir: Permission denied
tar: dist/assets/favicon.ico: Cannot open: Permission denied

$ls -ll
drw-rw-rw- 2 user grp    4096 Mar 14 16:43 assets

我在本地使用这个模块来压缩文件:

https://www.npmjs.com/package/tar

当我使用 mkdir 创建目录时,它给出 777 模式,我错过了什么?

按照要求:

-bash-4.2$ tar tzvf compress.tgz
drw-rw-rw- 0/0               0 2018-03-15 12:17 dist/
-rw-rw-rw- 0/0           13117 2018-03-15 12:17 dist/3rdpartylicenses.txt
drw-rw-rw- 0/0               0 2018-03-15 12:17 dist/assets/

我用来--strip 1提取。

答案1

正如您从输出中看到的,tar tv存档本身的权限已被破坏。如果您对创建此存档的工具有任何控制权,我强烈建议您修复它,或报告错误。

我假设您仍然需要从损坏的存档中提取文件。尝试这个:

tar xzvf compress.tgz --delay-directory-restore
find dist -type d -exec chmod a+x {} \;

+(在这种情况下我们不能使用尾随,因为chmod必须一次应用于一个目录,以便find可以下降到固定的子目录。分号以反斜杠为前缀,这样 shell 就不会将其视为特殊字符,但是相反,它find... -exec作为文字传递给 the 。)

答案2

使用star(from schily-tools),您可以使用以下命令提取它:

star xf file.tgz -no-p -find -type d -chmod a+x

将执行权限(对于每个人)添加到提取的目录中,以修复存档中的那些虚假权限。

对于-no-pumask即使以 root 身份运行,也会应用 ,假设您umask至少是 002 也会修复那些太宽的写入权限(请注意, 优先umask-chmod)。

tar请注意,在我的测试中,GNUbsdtarstar的实现都没有tar在使用此类损坏的权限提取存档时出现任何问题。最有可能的是,您正在尝试在存在时提取它已经没有搜索权限的目录dist(因为例如您提取了具有类似损坏权限的类似存档)。

在提取存档之前,您需要先修复这些权限。

相关内容