首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

shell编程之怎么遍历进入当前目录上的所有子目录(转)

2012-11-25 
shell编程之如何遍历进入当前目录下的所有子目录(转)问题:我想在顶层目录下编写一个脚本来调用自录下的cle

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 != . ] ; 原来点就可以直接作为字符串

热点排行