• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    利用shell脚本遍历文件夹内所有的文件并作整理统计的方法

    环境: Ubuntu下采用shell脚本实现

    案例简述: 文件夹内有许多子文件夹,这里需要自动读取所有的文件,包括他们的地址和文件名。通过观察文件名的规律,按照一定的规则裁剪出文件名的某一部分,该部分为数字,则根据数字的大小统计该文件夹内文件在各个数据段的数量。

    1.这里写一个函数,实现对文件夹内所有文件名的读取,采用的方法是递归!

    #!/bin/bash
    #folder="./test"
    
    function readfile ()
    {
    #这里`为esc下面的按键符号
     for file in `ls $1`
     do
    #这里的-d表示是一个directory,即目录/子文件夹
     if [ -d $1"/"$file ]
     then
    #如果子文件夹则递归
      readfile $1"/"$file
     else
    #否则就能够读取该文件的地址
      echo $1"/"$file
    #读取该文件的文件名,basename是提取文件名的关键字
     echo `basename $file`
     fi
     done
    }
    #函数定义结束,这里用来运行函数
    folder="./test"
    readfile $folder 

    2.这里实验了初始化变量和变量赋值

    #!/bin/bash
    a=002
    #打印a的值
    echo $a
    #注意这里赋初始值不能有空格
    b=20
    c=30
    #注意这里[]和符号及字母之间一定要有空格,否则错误!
    #这里shell脚本的逻辑运算-a表示与运算,-o表示或运算,!表示否运算
    #-lt表示小于,-gt表示大于,-eq表示等于,-ne表示不等于,-le表示小于等于,-ge表示大于等于
    if [ $a -lt $b -a $a -gt $c ]
    then
    #这里赋值注意两个括号,等号两边不能留有空隙
    a=$(($a + 2))
    a=$(($a + 1))
    a=$(($a+ 4))
    echo "hehe!"
    elif [ $a -lt $b ]
    then
    echo $(($a + 100))
    a=$(($a + 12))
    echo "a is:"$a
    echo "hello world!"
    else
    echo "i dont know"
    fi  

    3.综合实验

    #!/bin/bash
    #echo "start..."
    #define a function to read all the files in the folder
    #赋初始值
    a10=0
    a20=0
    a30=0
    a40=0
    a50=0
    a60=0
    a70=0
    
    #定义读取文件名的函数
    function readfile ()
    {
     for file in `ls $1`
     do
     if [ -d $1"/"$file ]
     then
    #这里采用递归的方法来读取文件名
      readfile $1"/"$file
     else
    #这一步使得temp变量获得文件名
      temp=`basename $file`
    #echo $temp
    #这里需要注意##*。。表示删除字符串最右边。。及其左边所有内容
    var=${temp##*M}
    #%。。*表示删除字符串左边的。。及其右边的内容!两个%%则表示最左边
    var1=${var%.*}
    var2=${var1%a*}
    var3=${var2%b*}
    var4=${var3%c*}
    var5=${var4%d*}
    var6=${var5%e*}
    var7=${var6%f*}
    var8=${var7%g*}
    #echo $var8
    
    #if 和括号之间必须有空格
    if [ $var8 -le 10 ]
    then
    a10=$(($a10 + 1))
    elif [ $var8 -gt 10 -a $var8 -le 20 ]
    then
    a20=$(($a20 + 1))
    elif [ $var8 -gt 20 -a $var8 -le 30 ]
    then
    a30=$(($a30 + 1))
    elif [ $var8 -gt 30 -a $var8 -le 40 ]
    then
    a40=$(($a40 + 1))
    elif [ $var8 -gt 40 -a $var8 -le 50 ]
    then
    a50=$(($a50 + 1))
    elif [ $var8 -gt 50 -a $var8 -le 60 ]
    then
    a60=$(($a60 + 1))
    else 
    a70=$(($a70 + 1))
    fi
    fi
    #echo $var8
    done
    #echo $a40
    }
    folder="/home/cc/Age/data/MORPH"
    readfile $folder 
    #打印出每个数字段的个数
    echo $a10
    echo $a20
    echo $a30
    echo $a40
    echo $a50
    echo $a60
    echo $a70 

    这里将该脚本保存为1.sh,在执行的时候如果用指令sh 1.sh则会报里面内容或者语法出错。笔者为此迷惑了很久,最终查找资料找到的解决办法是:

    a) 首先,使sh文件为可执行文件,命令: chmod +x 1.sh;

    b) 然后在终端直接执行./1.sh就可以执行。

    以上这篇利用shell脚本遍历文件夹内所有的文件并作整理统计的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • Shell脚本遍历目录并批量修改文件编码
    • shell递归输出文件名和目录名的方法
    • shell获取目录下所有文件夹的名称并输出的实例
    • linux Shell获取某目录下所有文件夹的名称
    • 详解shell 遍历文件夹内所有文件并打印绝对路径
    • shell脚本递归遍历目录及子目录的例子分享
    • shell 递归遍历目录下的所有文件并统一改名的方法
    上一篇:shell获取目录下所有文件夹的名称并输出的实例
    下一篇:详解Linux中两个查找命令locate和find教程
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    利用shell脚本遍历文件夹内所有的文件并作整理统计的方法 利用,shell,脚本,遍历,文件夹,