在linux shell(bash)编程中,如何通过递归方式遍历文件

在linux shell(bash)编程中,如何通过递归方式遍历文件,第1张

写一个函数,函数的参数是目录路径字符串

函数内使用 ls -s dir_path , 然后for 遍历循环

如果是目录则继续调用自身

如果是文件则答应文件名

从执行优化的角度来讲,可以把判断目录还是文件的代码放在循环外层.

好久没写shell了 ,我这也没环境测试 , 只能给个思路,函数的具体写法自己找一下资料吧.

另外,find命令可以直接完成你要做的事.

你可以参考如下实例代码:function getFile(file_name) 

    local f = assert(io.open(file_name, 'r'))

    local string = f:read("*all")

    f:close()

    return string

end function writeFile(file_name,string)

 local f = assert(io.open(file_name, 'w'))

 f:write(string)

 f:close()

end --从命令行获取参数, 如果有参数则遍历指定目录,没有参数遍历当前目录 if arg[1] ~= nil then

     cmd = "ls "..arg[1]

else

     cmd = "ls" end print("cmd", cmd)

--io.popen 返回的是一个FILE,跟c里面的popen一样 local s = io.popen(cmd)

local fileLists = s:read("*all")

print(fileLists)

while true do --从文件列表里一行一行的获取文件名 _,end_pos, line = string.find(fileLists, "([^\n\r]+.txt)", start_pos)

        if not end_pos then break end --    print ("wld", line) local str = getFile(line)

    --把每一行的末尾 1, 替换为 0, local new =string.gsub(str, "1,\n", "0,\n")

    --替换后的字符串写入到文件。以前的内容会清空     writeFile(line, new)

    start_pos = end_pos + 1 end

#!/bin/bash

(( $# < 1 )) && echo "param is zero!" && exit 1

[ ! -d $1 ] && echo "$1 not path" && exit 1

dir=$1

dir_p="$dir Directory :"

cd $dir

dir=`pwd`

for i in `ls $dir`

do

    if [ -d $i ] then

        /tmp/sh/dir_file $i            #我的脚本文件在/tmp/sh中,需要改一下这里

    else

        dir_p="$dir_p File $i"

    fi

done

cd ..

echo $dir_p

实验结果:

[root@localhost sh]# ./dir_file /tmp/python/

python_2 Directory : File 1.log File 2.log

python_3 Directory : File 3.log

/tmp/python/ Directory : File p File t.py File y.py

这样应该可以吧,试试看


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9003145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存