带有组的 chmod 文件 - 带有 ( 的文件上出现错误

带有组的 chmod 文件 - 带有 ( 的文件上出现错误

我需要 chmod 某个组中的文件。我想出了这个结构:

find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;

这可以工作,但当文件名中包含括号(或)时会失败。

有任何想法吗?

答案1

您使用插值的方式{}使文件名不带引号,因此它有点像 running chmod u=rw some(filename).txt,这会按照您所描述的方式失败。

一种解决方案是将{}移出带引号的字符串,以便它find本身可以正确处理它。

另一个问题是您似乎正在分割chmod命令,其中一部分在内部su,一部分在外部。 (通过替换sh为来演示这一点echo。)结果是一个损坏的命令,我不完全确定你想要实现什么。

试试这个(echo当你确定它正在做你想要的事情时删除):

su -c "
    find . -group groupname -exec echo chmod -R u+w,go+r,go-w {} \;
"

chmod您真的打算对每个恰好有 group 的目录应用递归吗groupname?也许您应该-type d在谓词集中考虑。

答案2

您必须将IFS变量设置为$(echo -en "\n\b"),例如:

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;
IFS=$SAVEIFS

相关内容