- 论坛徽章:
- 0
|
(问题已解决!)
现有文件夹,目录结构如下:
/tmp/test
/tmp/test/1/1/1/1/1/1/1/1/1/1/1
/tmp/test/1/2/2/2/2/2/2//2/2/2/2
/tmp/test/2/1/1/1/1/1//1/1/1/1/1
/tmp/test/2/3/3/3/3/3/3/3/3/3/3/3
/tmp/test/3/4/4/4/4/4/4/4/4/4/4/4
/tmp/test/3/5/5/5/5/5/5/5/5/5/5/5
现要求写一个shell程序,对如上目录逐级授权(chmod 755) ,也就是说先进test目录,对1,2,3目录授权,然后再进1的子目录,对1,2授权,以此类推,1级目录授权完毕后,再进2级目录授权。一个分支授权完毕后进入另外一个目录分支授权。
ps : 因为每一级目录下都有几千万的文件,我不需要对文件操作,只需要对文件夹操作,以减轻操作量。
目前,我只实现了授权完一个目录分支,就退出来了,代码如下:
- #!/bin/bash
- # site: Chinaunix Author: echo52
- # name: chmodfile
- PATH=$PATH:/bin:/sbin:/usr/bin:/usr/local/bin
- DIRPATH1=`find $1 -maxdepth 1 -type d|sed '1d'`
- DIRNUM=1
- # 授权 初始 目录
- chmod 755 $DIRPATH1
- #echo "$DIRPATH1"
- until [ $DIRNUM = 0 ]
- do
-
- for a in $DIRPATH1
- do
- A_DIRPATH=`echo $a`
-
- echo "授权路路径 $A_DIRPATH"
- chmod 755 $A_DIRPATH
-
- DIRPATH1=`find $A_DIRPATH -maxdepth 1 -type d|sed '1d'`
- DIRNUM=`find $A_DIRPATH -maxdepth 1 -type d|sed '1d'|wc -l`
- done
- done
复制代码
执行结果如下:
- [root@test tmp]# ./chmodfile ./
- 授权路路径 ./test
- 授权路路径 ./test/2
- 授权路路径 ./test/1
- 授权路路径 ./test/3
- 授权路路径 ./test/3/4
- 授权路路径 ./test/3/5
- 授权路路径 ./test/3/5/5
- 授权路路径 ./test/3/5/5/5
- 授权路路径 ./test/3/5/5/5/5
- 授权路路径 ./test/3/5/5/5/5/5
- 授权路路径 ./test/3/5/5/5/5/5/5
- 授权路路径 ./test/3/5/5/5/5/5/5/5
- 授权路路径 ./test/3/5/5/5/5/5/5/5/5
- 授权路路径 ./test/3/5/5/5/5/5/5/5/5/5
- 授权路路径 ./test/3/5/5/5/5/5/5/5/5/5/5
- 授权路路径 ./test/3/5/5/5/5/5/5/5/5/5/5/5
复制代码
可以看到只是 ./test/3/5/5/5/5/5/5/5/5/5/5/5 完全完成了,DIRNUM 为0了,循环退出。
总结一下楼下各位的建议,这个问题的通用性比较好的解决方法如下:
- #!/bin/bash
- # site: Chinaunix
- # Author: crisman,damofeixue,ivhb,echo52
- # name: chmodfile
- # 如若转载,引用, 请保留以上信息
- if [ $# -ne 2 ]
- then
- echo " "
- echo " usage: chmodfile DIR NUM"
- echo " DIR 为需要授权的起始目录 NUM为需要授权的目录级数(为正的整数)"
- echo " 例如: ./chmodfile ./ 5
- echo " "
- exit 1
- fi
- for i in `seq 1 $2`
- do
- find $1 -mindepth $i -maxdepth $i -type d |xargs chmod 755
- done
复制代码
感谢crisman,damofeixue,ivhb 特此结贴!
[ 本帖最后由 echo52 于 2009-7-14 16:33 编辑 ] |
|