如何更改文件夹及其所有子文件夹和文件的权限?

这仅适用于/opt/lampp/htdocs文件夹,而不适用于其内容:

chmod 775 /opt/lampp/htdocs

如何为/opt/lampp/htdocs文件夹的所有当前内容设置chmod 755,以及将来自动为其下创建的新文件夹/文件设置chmod?


当前回答

这里有另一种方法可以将目录设置为775,将文件设置为664。

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

它可能看起来很长,但很酷,原因有三:

仅扫描文件系统一次而不是两次。提供对文件处理方式与目录处理方式的更好控制。这在处理特殊模式(如粘滞位)时非常有用,您可能希望将其应用于目录而不是文件。直接使用手册页中的技术(见下文)。

注意,我还没有确认此解决方案与简单使用两个find命令(如Peter Mortensen的解决方案)之间的性能差异(如果有的话)。然而,在手册中看到类似的例子是令人鼓舞的。

手册查找页面示例:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and direct‐
tories into /root/suid.txt and large files into /root/big.txt.

其他回答

如果要将所有文件的权限设置为+r,将所有目录设置为+x,并通过完整的子目录树递归执行此操作,请使用:

chmod -R a+rX *

X(即大写的X,而不是小写的X!)对于文件被忽略(除非它们已经可以为某人执行),但用于目录。

正确的递归命令是:

sudo chmod -R 755 /opt/lampp/htdocs

-R: 更改每个子文件夹,包括当前文件夹

chmod 755-R/opt/lampp/htdocs将递归设置权限。无法仅在设置权限后创建的目录中自动设置文件的权限,但可以通过设置umask 022来更改系统范围内的默认文件权限。

对于仍在权限问题上挣扎的任何人,请导航到一个目录级别的cd。。从项目的根目录中,将自己(用户)添加到目录中,并允许编辑其中的所有内容(在macOS上测试)。

为此,您可以运行以下命令(首选):

sudo chown -R username: foldername .*

注意:对于当前未保存的更改,可能需要首先重新启动代码编辑器,以便能够保存而无需询问密码。

此外,请记住,您可以在键入用户名和文件夹时按Tab键查看选项,以使自己更方便。


或者简单地:

sudo chmod -R 755 foldername

但是如上所述,您需要小心使用第二种方法。

查找文件并对其应用chmod有两种答案。

第一个方法是找到文件,并根据找到的文件应用chmod(正如@WombleGoneBad所建议的那样)。

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

第二种解决方案是使用find命令生成所有文件的列表,并将该列表提供给chmod命令(如@lamgesh所建议的)。

chmod 755 $(find /path/to/base/dir -type d)

只要find命令返回的文件数量很少,这两个版本都能很好地工作。第二种解决方案看起来很好看,比第一种更易读。如果有大量文件,第二个解决方案将返回错误:参数列表太长。

所以我的建议是

如果要同时更改所有文件和目录的权限,请使用chmod-R 755/opt/lampp/htdocs。使用find/opt/lamp/htdocs-type d-exec chmod 755{}\;如果您使用的文件数量非常大。-type x选项仅搜索特定类型的文件,其中d用于查找目录,f用于文件,l用于链接。否则使用chmod 755$(find/path/to/base/dir-type d)在任何情况下都最好使用第一个