当前位置: > shell编程 >

利用shell脚本遍历某个目录下的所有文件

时间:2014-06-22 04:58来源:linux.it.net.cn 作者:IT网
 1 我们都知道shell脚本能够做很多的事,今天刚好一个队友要我写个脚本求某个目录下所有java文件的行数总和
 2 ok,为了方便,我把这个目录放到了当前的家目录下,路径为/home/chenguolin/src
 3 我在家目录下建了一个s.sh的脚本,代码如下,等等来分析代码的意思
[plain] 
#!/bin/bash  
function ergodic(){  
    for file in ` ls $1 `  
    do  
        if [ -d $1"/"$file ]  
        then  
             ergodic $1"/"$file  
        else  
             wc -L $1"/"$file | cut -d' ' -f1 >> /home/chenguolin/out  
        fi  
    done  
}  
INIT_PATH="/home/chenguolin/src"  
ergodic $INIT_PATH  
 4 分析一下代码的意思
     1 第一行是一个常规的格式,我们要指定这个脚本是由bash来执行
     2 第二行是一个脚本的函数
     3 第三行是一个for循环,shell里面把反引号里面的命令认为是系统命令,那么代码的意思就是循环枚举这个目录下的文件,$1是指函数的第一个参数
     4 第四行跳过,相信大家都懂
     5 第五行是一个判断语句,如果当前文件是一个目录
     6 if的结构then
     7 递归执行这个函数,传入当前目录
     8 如果文件不是目录,那么我们执行下一行
     9 wc -L $1"/"$file 这个命令是求当前这个文件的行数,没有包括空行
        | cut -d' ' -f1  这个命令是管道的应用,通过前面得到的结果我们去重新定义cut的分割符为空格,并且只显示第一列
        >> /home/chenguolin/out      把前面得到的内容重定向到家目录下的out文件
     10 结束for循环
     11 括号,呵呵呵
     12 初始化要遍历的目录的路径
     13 函数调用并传入这个路径
 
 5 执行
    1 首先我们先给这个文件s.sh一个执行权限,先进入家目录
       cd ~
       chmod u+x s.sh
    2 执行文件 
       ./s.sh
    3 得到out的内容(我们这边要保证out在执行前是空的内容),可以利用cat来查看
    4 我们得到的out内容
         
 
 
   5 那么我们得到了每一个文件的行数,现在你是不是想直接手算了啊?
      如果真这么想那么你就呵呵呵呵呵了
      我们可以利用Python来求出这个文件的总和,我就在家目录下建立一个p.py的Python文件
     下面直接贴代码了
[python] 
#!/bin/python  
sum = 0  
while True:  
      try:  
         str = raw_input()  
      except:  
         break  
      num = int(str)  
      sum += num  
print sum  
 
   6 进入到家目录下直接利用重定向来运行p.py
      python p.py < out
(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容