LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1140|回复: 4

如何给某个目录下的所有子目录添加执行权限?

[复制链接]
发表于 2006-3-10 16:12:48 | 显示全部楼层 |阅读模式
我用户目录下所有目录都没有执行权限,我想写一个脚本来修改,但是写出来的运行成功不了。
刚开始学写脚本,请各位大大指教:

#!/bin/bash
chmoddir()
{

        for file in *
        do
                echo $file
                if [ -d $file ]
                then
                        chmod 755 $file;
                        cd $file;
                        chmoddir;
                fi
        done;
}

chmoddir;
发表于 2006-3-10 17:27:41 | 显示全部楼层
find -type d -exec chmod +x {} \;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-10 17:44:53 | 显示全部楼层
多谢版主,已经搞定了。
另外我上面的脚本错在那里呢?它只对当前目录有效,没有递归。
回复 支持 反对

使用道具 举报

发表于 2006-3-10 18:20:30 | 显示全部楼层
错误原因:   cd到子目录后没有返回

解决办法:

cd $file;
chmoddir;
改为:
cd $file
chmoddir
cd ..

或者加个括号,使其作为一个子shell运行:
( cd $file;  chmoddir; )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-11 11:52:05 | 显示全部楼层
多谢楼上大哥。刚才做了个实验明白了。
原来如果不返回的话,递归就行不通了。第一句for file in *是在每次循环时对当前目录执行*;而不是像其他语言里面那样第一次执行for file in *时就把范围确定了;或者说后面的语句执行把前面的环境改变了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表