现在,我有一个每天运行的脚本,chmod 是主目录,从目录中删除所有“其他”权限和“组”写入权限。见下文。
#Removing all other permissions on all home directories and write from group
ls /home | sed 's/ //g' |
while read i; do
chmod -R o-rwx /home/$i
chmod -R g-w /home/$i
done
这很好用;但是,我更希望脚本检查是否有任何需要更改的文件,然后对它们采取行动,而不是每次都这样做,无论是否需要它。
我假设我可以将整个事情放入语句内的子函数中if
,但我不知道我将在该if
语句内运行什么测试。
如何测试目录是否需要更改?
答案1
使用查找:
find /home/* -type d -maxdepth 0 -perm /g+w,o+rwx -exec chmod g-w,o-rwx '{}' +
如果您想执行此递归操作(如-R
示例中所使用的那样),请使用此
find /home/* -perm /g+w,o+rwx -exec chmod g-w,o-rwx '{}' +
编辑:
find选项简要说明,详情参见man find
:
与-perm
一起/mode
意味着设置任何位。
经典-exec
语法是-exec command '{}' ';'
.这些字符{}
被文件名替换,引号是为了保护它们免受 shell 的影响,在大多数 shell 上,这不是必需的,但也没有什么坏处。是';'
命令的结尾,对于大多数 shell 来说,这里引用是必需的,但另一种形式是\;
。缺点是每个更改的文件都会调用一次 chmod。使用命令以 终止的替代形式可以避免这种情况+
。这种形式以多种名称调用 exec,其效果与 类似xargs
,甚至节省了调用 的开销xargs
。