【Bash】进入当前目录下的所有子目录并操作的小程序

程序功能:进入当前目录下的所有子目录,并对子目录下的文件或目录进行一系列操作,简单起见,下文的程序仅仅打印子目录下的文件。

分析:

    分别判断当前目录下的文件名是否是目录,如果是,则cd进入,若不是,则过滤。

 

代码:

#!/bin/bash

# find  a  directory and enter the directory

# written by house

#

PWDD=`pwd`

if [ ! -f childdir ]

then

        echo "enter the juge."

        touch childdir && ls -1 > childdir

fi



while  read line

do

        if [ -d "$PWDD/$line" ]

        then

                echo ""

                echo "$line  is  a directory."

                nowdir="$PWDD/$line"

                if  cd  $nowdir

                then

                        echo $nowdir

                        ls

                else

                        echo "failed to enter $line.please check it."

                fi

        fi

done < childdir





rm "$PWDD/childdir"



exit 0

记录一下,我在这上面犯过的一些错误:

    1.if -d 判断时,最初直接使用$line,而不是$PWDD$line,这样有一个问题,当cd进入目录后,它就永远判断不存在$line目录,然后直接退出脚本;

    2.起初,我使用cat childdir | while read line。这样造成一个问题,那就是运行了一个新的子shell。判断失败后,就直接在子shell中了,很不妥,后经人指点,换成了'< childdir'模式。

值得一提的是,河畔网友rool提供了另一种方法,使用for循环与find命令操作,比我的方法更简洁更有力,看了他这么棒的方法,我都想自沙,不过算了,还是继续努力,撸啊撸。

#!/bin/bash

# find  a  directory and enter the directory

# written by house

#

#  idea from rool





PWDD=`pwd`

DIRRD="$PWDD/`find $PWDD -maxdepth 2 -type d`"

for childdir in $DIRRD

do

        echo "$childdir"

        echo ""

        cd $childdir

        ls

        sleep  2

        echo ""

        cd ..

done



exit 0

此外:

程序功能还可以进行一些扩展:

   1.循环进入子目录,打印当前目录下的所有目录树;

   2.由外部提供参数,不限于打印脚本文件所在目录的子目录,而可以让它在当前目录下运行,打印其他目录的子目录;

   3.打印可以改成其他操作,比如打包文件,查找某种特殊文件,这就实现了find的部分功能,这里说明我的代码还是有一点好处,那就是可以实现find部分功能,当然这是鸡肋了。

 

你可能感兴趣的:(bash)