提取具有指定权限的文件和文件夹


11

我在Windows中使用7zip打包了一个包含许多子文件夹和文件的文件夹,上传到VPS,然后运行以下命令:

tar -xvzf file.tar.gz

那么所有解压缩的文件和文件夹的权限均为777。如何获取文件夹的权限为755,文件的权限为644?


有一个名为“ Command Line Fu”的网站,它也有很多其他想法。
djangofan 2012年

Answers:


13

如果您tar(1)以普通用户身份运行,则umask默认情况下它将应用您的身份。如果以tar(1)as身份运行root,则可以给--no-same-permissions命令行选项以要求tar(1)遵守umask

所以:要么以普通用户身份运行它:

umask 022
tar zxvf file.tar.gz

或运行为root

umask 022
tar zxvf file.tar.gz --no-same-permissions

你可能要坚持umask 022到你~/.bashrc~/.bash_profile~/.profile。(有关bash(1)启动文件的完整详细信息,请参见手册页。这很复杂。)

有关详细信息,请umask参见外壳程序的联机帮助页,umask(2)系统调用联机帮助页或umask(1posix)POSIX提供的实用程序联机帮助页(如果已manpages-posix安装)。


umask 022 tar zxvf file.tar.gz->如果我要提取它,这会要求我分别确认每个文件

这样做会覆盖现有文件吗?
sarnold 2012年

6

在目录的根目录中运行以下命令,以设置目录和文件的所需权限:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

注意右花括号和反斜杠之间的空间


发现:缺少“ -exec”的参数

知道为什么该命令对我说“找到:缺少--exec参数”吗?谢谢。

\;

2

如果使用大写字母X,则chmod可以使用它设置目录的执行权限。即

chmod -R ugo+X .

1

我找到了对我有用的解决方案。对于文件夹和子文件夹:

chmod -R 777 */

对于所有文件(也在文件夹和子文件夹中):

find . -type f -name "*" | xargs chmod 644

如果这不是一个好的方法,欢迎所有评论。我刚刚开始学习Linux。

在评论之后,可以更好地处理特殊字符的更强大的解决方案是:

find . -type f -print0 | xargs -0 chmod 644  # For files
find . -type d -print0 | xargs -0 chmod 755  # For directories

但是第二个命令为我在许多文件上提供了以下输出:chmod:无法访问the': No such file or directory chmod: cannot access Logo.txt':没有这样的文件或目录chmod:无法访问`./blog/wp-content/themes/OneRoom/LOGO':没有这样的文件或目录

2
777是危险的,仅适用于极少数系统。
sarnold 2012年

2
为了改善您的第二条命令,find . -type f -print0 | xargs -0 chmod 644。该-name "*"是没有必要的,并且xargs(1)将解析的文件名空格换行,除非你使用-0-这在解析文件名的ASCII NUL字符,不能出现在文件名。在-print0用于find(1)要求它到它的输出格式化适合于模式xargs -0输入。
sarnold 2012年

0

找 。-类型f -exec chmod 644 {} \;


2
欢迎来到超级用户,请注意,很少接受1行答案,您能否详细说明答案?
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.