我想更改文件权限并排除文件夹及其内容(或者只排除内容也可以)。
它似乎不像 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