shell脚本递归遍历目录及子目录的例子分享

用shell写的递归遍历目录的脚本,脚本实现递归遍历指定目录,打印目录下的文件名。

实例1:


代码如下:

#!/bin/sh

function scandir() {
    local cur_dir parent_dir workdir
    workdir=$1
    cd ${workdir}
    if [ ${workdir} = "/" ]
    then
        cur_dir=""
    else
        cur_dir=$(pwd)
    fi

for dirlist in $(ls ${cur_dir})
    do
        if test -d ${dirlist};then
            cd ${dirlist}
            scandir ${cur_dir}/${dirlist}
            cd ..
        else
            echo ${cur_dir}/${dirlist}
        fi
    done
}

if test -d $1
then
    scandir $1
elif test -f $1
then
    echo "you input a file but not a directory,pls reinput and try again"
    exit 1
else
    echo "the Directory isn't exist which you input,pls input a new one!!"
    exit 1
fi

实例2:递归读取目录及其子目录


代码如下:

#! /bin/bash
function read_dir(){
    for file in `ls $1`
    do
        if [ -d $1"/"$file ]  //注意此处之间一定要加上空格,否则会报错
        then
            read_dir $1"/"$file
        else
            echo $1"/"$file
        fi
    done
}

#测试目录 test
read_dir test

这样给test.sh加上执行权限即可执行


代码如下:

chmod +x test.sh
sh test.sh

到此即可通过传递参数来读取目录文件了。

实例3:

代码如下:

递归实现各个子目录孙目录......

#!/bin/bash

#modify.func

doit()   //处理当前目录下的非目录文件,忽略目录文件

{

oldname=`ls | grep "$1$"`

for name in $oldname

do

if [ -d "$name" ]

then :

else

basename=`echo $name | awk -F "." '{print $1}'`

newname="$basename$2"

echo -e "$PWD/$name\t\t$newname"

mv $name $newname

count=`expr ${count} + 1`

fi

done

return 0

}

do_recursive()          //从当前目录开始,递归处理各目录

{

doit $1 $2

for filename in `ls`

do

if [ -d "$filename" ]

then

cd $filename

do_recursive $1 $2

cd ..

fi

done

return 0

}

modify()                     //处理当前目录,并报告结果,这个相当于主函数,也可以直接调用do_recursive

{

PARAMS=2

if [ $# -ne $PARAMS ]

then

echo "usage: mv_to .suf1 .suf2"

return 1

fi

count=0

do_recursive $1 $2

echo "complete! $count files have been modified."

return 0

}

(0)

相关推荐

  • 层序遍历在ExtJs的TreePanel中的应用

    原理非常简单,就是树的层序遍历,在遍历过程中遇到第一个叶子节点即完成工作. 效果如下图:代码如下: 复制代码 代码如下: var currentRootNode = null;//当前选择的根节点 function NodeClass() { //定义一个节点类 var nodeValue = null; var nextNode = null;//下一个节点 } function InitQueue(queue) { //初始化一个队列 queue = new NodeClass();//头节

  • C#使用yield关键字让自定义集合实现foreach遍历的方法

    foreach遍历是C#常见的功能,而本文通过实例形式展现了C#使用yield关键字让自定义集合实现foreach遍历的方法.具体步骤如下: 一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口) 但是我们也可以通过使用yield关键字构建的迭代器方法来实现foreach的遍历,且自定义的集合不用实现IEnumerable接口 注意:虽然不用实现IEnumerable接口 ,但是迭代器的方法必须命名为

  • PowerShell遍历文件、文件夹的方法

    PowerShell遍历文件夹下的子文件夹和文件是一件很容易的事儿.Get-ChildItem这个cmdlet就有一个recurse参数是用于遍历文件夹的. PowerShell中,使用Get-ChildItem来获取文件夹下面的子文件夹和文件(当然,它的功能不仅于此).然后我们可以使用ForEach-Object的cmdlet来循环遍历下面的子对象.然后通过psiscontainer 属性来判断是文件夹还是文件. Get-ChildItem,获取指定对象的所有子对象集合. 举例: 复制代码 代

  • jstl EL表达式遍历Map的方法

    在EL中,方括号运算符用来检索数组和集合的元素. 对于实现 Java.util.Map 接口的集合,方括号运算符使用关联的键查找存储在映射中的值. 在方括号中指定键,并将相应的值作为表达式的值返回. 例如,表达式 ${map['key']} 返回与 map标识符所引用的 Map 中的 "key" 键相关联的值. 当forEach 的items属性中的表达式的值是java.util.Map时,则var中命名的变量的类型就是 java.util.Map.Entry. 这时var=entry

  • 浅析jQuery对select操作小结(遍历option,操作option)

    //遍历option和添加.移除optionfunction changeShipMethod(shipping){ var len = $("select[@name=ISHIPTYPE] option").length if(shipping.value != "CA"){  $("select[@name=ISHIPTYPE] option").each(function(){   if($(this).val() == 111){   

  • 在JSTL EL中处理java.util.Map,及嵌套List的情况

    在方括号中指定键,并将相应的值作为表达式的值返回.例如,表达式 ${map['key']} 返回与 map标识符所引用的 Map 中的 "key" 键相关联的值. 当forEach 的items属性中的表达式的值是java.util.Map时,则var中命名的变量的类型就是 java.util.Map.Entry.这时var=entry的话,用表达式${entry.key}取得键名. 用表达${entry.value}得到每个entry的值.这是因为java.util.Map.Entr

  • shell脚本递归遍历目录及子目录的例子分享

    用shell写的递归遍历目录的脚本,脚本实现递归遍历指定目录,打印目录下的文件名. 实例1: 复制代码 代码如下: #!/bin/sh function scandir() {    local cur_dir parent_dir workdir    workdir=$1    cd ${workdir}    if [ ${workdir} = "/" ]    then        cur_dir=""    else        cur_dir=$(p

  • Shell脚本实现的一个简易Web服务器例子分享

    假设你想测试网页和一些CGI,而你又不想麻烦Apache安装完整的包.这个快速的shell脚本可能只是你所需要的东西. 简而言之,一个web服务器是一个应用程序,该应用程序将本地文本文件通过网络发送给客户的请求.如果你让另一个程序(例如inetd)处理网络情况下,web服务器可以减少到只有 cat "文件名"发送到stdout.当然,困难将提取部分文件名的HTTP请求字符串:任何一个Bash脚本无法轻易做到. 脚本 我们的脚本应该像其他任何脚本一样,加上一些定义: 复制代码 代码如下:

  • 使用Shell遍历目录及其子目录中的所有文件方法

    新建一个shell文件 $ vi traveDir.sh 输入以下代码 #! /bin/bash function read_dir(){ for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令 do if [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错 then read_dir $1"/"$file else echo $1"/"$file #在此处处理文件即可 fi done } #

  • shell 递归遍历目录下的所有文件并统一改名的方法

    遇到一道题目,如何把某个目录下的每个文件统一在名字前加上"abc",用shell实现 首先分析,一个目录下除了文件,还可能存在目录,这里可以看出需要有递归操作,如果是文件直接改名,目录则进入然后进行遍历 如何实现遍历?我们写一个函数: function travFolder(){ #echo "travFolder" flist=`ls $1` cd $1 #echo $flist for f in $flist do if test -d $f then #ech

  • PHP不用递归遍历目录下所有文件的代码

    实现代码: /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ function scanfiles($dir) { if (! is_dir ( $dir )) return array (); // 兼容各操作系统 $dir = rtrim ( str_replace ( '\\', '/', $dir ), '/' ) . '/'; // 栈,默认值为传入的目录 $

  • shell 批量压缩指定目录及子目录内图片的方法

    用户上传的图片,一般都没有经过压缩,造成空间浪费.因此需要编写一个程序,查找目录及子目录的图片文件(jpg,gif,png),将大于某值的图片进行压缩处理. 代码如下: #!/bin/bash # 查找目录及子目录的图片文件(jpg,gif,png),将大于某值的图片进行压缩处理 # Config folderPath='/home/fdipzone/photo' # 图片目录路径 maxSize='1M' # 图片尺寸允许值 maxWidth=1280 # 图片最大宽度 maxHeight=1

  • 通过shell脚本循环进入目录执行命令的方法

    公司需要部署一套新的环境,新环境里面好多项目,整体目录结构如为:/webserver/* 所有的项目都在webserver目录下,其中有laravel和thinkphp项目的代码. laravel框架中, 根目录下storage vendor bootstrap 目录需要设置777权限. thinkphp框架,根目录App下Runtime目录需要设置777权限. 因此相对应的目录结构如下; laravel框架的目录结构为:/webserver/aaa/www/storage,vendor,boo

  • python 遍历目录(包括子目录)下所有文件的实例

    如下所示: def list_all_files(rootdir): import os _files = [] list = os.listdir(rootdir) #列出文件夹下所有的目录与文件 for i in range(0,len(list)): path = os.path.join(rootdir,list[i]) if os.path.isdir(path): _files.extend(list_all_files(path)) if os.path.isfile(path):

  • Python中递归以及递归遍历目录详解

    目录 递归 递归求和 递归处理非线性循环 花钱递归 递归注意事项 实现Tree命令 总结 递归 递归的概念:函数包含了对自身的调用,那么就是递归 使用的场景:如果你发现你将要做的事情就是你现在做的,那么用递归 递归类似循环:在编写或阅读递归时,首先我们关注的是递归的终止条件 递归求和 在接触递归之前,我们先来做这么一个问题:如果说,要对一个数字列表求和(或者其他序列)求和,除了我们可以使用内置的sum函数,还有什么办法? while循环 L = [1,2,3,4,5] mysum = 0 #保存

  • Jar包一键重启的Shell脚本及新服务器部署的一些经验分享

    前言 最近公司为客户重新部署了一套新环境,由我来完成了基础环境的配置,配置过程中总结了一些经验,分享给各位园友 使用 curl 命令检查网络 拿到新服务器后,首先检查服务器网络是否通畅.我们常用的 ping 命令使用的是 ICMP 协议,大部分服务器都设置了域名出入站规则,即使某些地址可以 ping 通,也存在服务器无法访问的情况.这时可以使用 curl host:port 命令来测试该服务器能否正常发送 http 请求到外部服务器 安装 JDK 新服务器一般没有 JDK ,可以使用 java

随机推荐