LinuxSir.cn,穿越时空的Linuxsir!

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

目录可执行?

[复制链接]
发表于 2003-9-29 17:48:24 | 显示全部楼层 |阅读模式
写了个小bash,统计一个项目下所有源代码的行数(无聊,刚学bash,见笑),这里所指的源代码包括.c;.h;.h??;.mk;.def等等,反正是要人去维护的东西。
思路很简单,递规遍历一个目录,碰到符号连接,可执行文件什么的就跳过,碰到目录就进去,用wc -l统计函数。
主体部分如下:

  1. calc_dir()
  2. {
  3.   for file in `ls $PWD`
  4.   do
  5.     if [ -L $file -o -x $file ]
  6.     #if [ -L $file ]
  7.     then
  8.       echo "$file is non-ascii, ignored"
  9.     elif [ -f $file ]
  10.     then
  11.       #wc -l $file
  12.       line_num=$(( $line_num + `wc -l < $file`))
  13.     elif [ -d $file ]
  14.     then
  15.       cd $file
  16.       echo $file
  17.       calc_dir
  18.       cd ..
  19.     fi
  20.   done;
  21. }
复制代码

运行环境是win2k pro + cygwin
然后发现一个很诡异的现象就是用 -x检查文件属性的时候,碰到目录就当作可执行文件跳过了……虽然偶2000的目录权限都是可读写可运行的,不过难道-x检查只是简单的检查一个文件的权限属性而不是文件本身嘛?那有不同执行权限得用户运行同一个脚本不是会得出完全不同的结果?
发表于 2003-9-29 18:01:10 | 显示全部楼层
对目录的检查要用-d,因为目录的一般属性是drwxr-xr-x,要用-x检查的话当然就把这个目录当可执行文件啦.是不是把你对目录的检查放在前面.?
发表于 2003-9-29 18:54:59 | 显示全部楼层
我写了一个,你看看跟你的效果是否一样?
  1. [/home/javalee/myshell]cat _wc
  2. #!/bin/ksh
  3. #
  4. for i in $(du|awk '{print $2}'|sort)
  5. do
  6.         echo $i
  7.         echo -n "Total:"
  8.         for j in $(ls $i)
  9.         do
  10.                 if [[ ! -x $j || -d $j ]]
  11.                 then
  12.                 echo $j
  13.                 fi
  14.         done|wc -l|tr -s ' '
  15. done
复制代码
测试:
[/home/javalee/myshell]_wc
.
Total: 18
./aaaa
Total: 3
./aaaa/aaa
Total: 2
./aaaa/aaa/aa
Total: 1
./bbbb
Total: 0
./cccc
Total: 0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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