设置文件权限,排除文件夹 - 不适用于 chmod(适用于 chown?)

设置文件权限,排除文件夹 - 不适用于 chmod(适用于 chown?)

我想更改文件权限并排除文件夹及其内容(或者只排除内容也可以)。

它似乎不像 chown 那样工作 - 因为使用 chown 我可以更改所有者并排除文件夹,如下所示:

sudo find . ! \( -path './images' -o -path './images/*' \)  -exec chown 33:33 {} \;

但是当我尝试使用相同的语法更改权限时:

sudo find . ! \( -path '/home/myuser/testdir/three/uploads/*' -o -path 
'/home/myuser/testdir/three/uploads' \) -type f -exec chmod 644 {} \;

该文件夹未被排除,所有文件都受到影响。这不是因为添加了“ -type f”,chown 命令也适用。

所以我想知道我需要改变什么才能使它与chmod命令一起工作?

答案1

这个问题不是由chmod命令引起的,而是由你的find表达引起的。

在您的工作示例中,您测试的类似于-path './images'匹配起始目录.,而在非工作命令中,您使用绝对路径-path和相同的相对起始目录。

要查看哪些文件符合您的表达式,请运行

sudo find . ! \( -path '/home/myuser/testdir/three/uploads/*' -o -path 
'/home/myuser/testdir/three/uploads' \) -type f -print

我建议首先省略所有排除模式,然后添加与文件打印路径实际匹配的排除模式。

一般来说,如果您要执行一个会改变系统某些内容的命令,那么在添加操作之前,您应该先find用该命令测试-print,直到获得预期的文件列表-exec


另一个选择是使用匹配的起始目录,例如

sudo find /home/myuser/testdir ! \( -path '/home/myuser/testdir/three/uploads/*' -o -path 
'/home/myuser/testdir/three/uploads' \) -type f -print

相关内容