`
冲杯茶喝
  • 浏览: 29414 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

shell编程之如何遍历进入当前目录下的所有子目录(转)

阅读更多

问题:

我想在顶层目录下编写一个脚本来调用自录下的clean.sh文件,该如何实现?

 

第一种情况:

假设目录结构为:

fme/

     |__clean.sh 

     |__dc250/clean.sh

     |__dc300/clean.sh

     |__dc350/clean.sh

现在我在fme结构下编写一个clean.sh文件调用各个子目录下的clean.sh文件。

实现方法如下:

 #!/bin/bash

复制代码
 for dir in `ls .`
 
do
   
if [ -d $dir ]
   then
     echo $dir
     cd $dir
     . clean.sh
     cd ..
   fi
done 
复制代码

 

这里需要学习的是if的判断语句。

文件表达式
if [ -f  file ]    如果文件存在
if [ -d ...   ]    如果目录存在
if [ -s file  ]    如果文件存在且非空 
if [ -r file  ]    如果文件存在且可读
if [ -w file  ]    如果文件存在且可写
if [ -x file  ]    如果文件存在且可执行

 

 

整数变量表达式
if [ int1 -eq int2 ]    如果int1等于int2   
if [ int1 -ne int2 ]    如果不等于    
if [ int1 -ge int2 ]       如果>=
if [ int1 -gt int2 ]       如果>
if [ int1 -le int2 ]       如果<=

if [ int1 -lt int2 ]       如果< 

 

字符串变量表达式
If  [ $a = $b ]                 如果string1等于string2
                                字符串允许使用赋值号做等号
if  [ $string1 !=  $string2 ]   如果string1不等于string2       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string  ]             如果string 为空

if  [ $sting ]                  如果string 非空,返回0 (和-n类似)  


此问题就这样解决了。

 

还学习到了一个遍历所有子目录的表达方式:

find . -type d | while read dir; do echo $dir; done

 

第二种情况:

第一种情况是两层次的目录是父子关系,因此可以上面的方法实现。若两个层次上的目录并不是直接的父子关系,这时候在用上面的方法显然不合适。这里采用更加简洁的方法,第一种情况亦可以用。

复制代码
#!/bin/bash
for dir in `find . -name clean.sh`
do
  path
=`dirname $dir`
  
if [ $path != . ]
  then
    echo $path
    cd $path
    . clean.sh
    cd 
-
  fi
复制代码

done

 

学习点:

搜索某个文件:

find . -name clean.sh

提取出路径名

dirname path

字符串判断

if [ $path != . ] ; 原来点就可以直接作为字符串

分享到:
评论

相关推荐

    精通Windows.API-函数、接口、编程实例.pdf

    4.3.5 查找文件、遍历指定目录下的文件和子目录 100 4.3.6 递归遍历目录树 103 4.3.7 获取、设置文件属性和时间 105 4.4 内存映射文件 110 4.4.1 使用Mapping File提高文件读写的效率 110 4.4.2 通过...

    Tcl_TK编程权威指南pdf

    当前目录-cd和pwd 使用glob来匹配文件名 exit和pid命令 环境变量 registry命令 第2部分tcl高级特性 第10章 引用问题与eval 使用list命令来构建代码 在eval内部利用concat uplevel命令 subst命令 第11章 ...

    精通WindowsAPI 函数 接口 编程实例

    4.3.5 查找文件、遍历指定目录下的文件和子目录 100 4.3.6 递归遍历目录树 103 4.3.7 获取、设置文件属性和时间 105 4.4 内存映射文件 110 4.4.1 使用Mapping File提高文件读写的效率 110 4.4.2 通过...

    VISUAL C++实效编程280例

    8.12 实例168:获取或设置进程的当前目录 8.13 实例169:获取Windows目录和System目录 8.14 实例170:创建临时文件 8.15 实例171:创建目录 8.16 实例172:删除目录 8.17 实例173:逐行读取文本文件 8.18 实例174:...

    vc++ 应用源码包_6

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_1

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_5

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_3

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_2

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 开发实例源码包

    3:可以在不下载ZIP.RAR.ISO文件的情况下查看文件里面的目录文件. 4:支持多语言. 5:操作综合其它软件. 6:自定义快捷键. 7:在IE工具栏上加按钮,可以直接拖动连接到按钮上下载. 8:注册采用激活方式. 9:采用Messenger的...

Global site tag (gtag.js) - Google Analytics