美文网首页
shell搭配工具遍历文件使用示例

shell搭配工具遍历文件使用示例

作者: 瑶琴频曲羽衣魂 | 来源:发表于2022-08-23 17:28 被阅读0次

    说明

    运行环境:Windows 10

    本文收集一些shell脚本常用的遍历文件的使用示例。

    1.常用语句

    数组拼接与遍历

    array[${#array[*]}]=123
    array[${#array[*]}]=abc
    array[${#array[*]}]="string"
    for (( i = 0; i < ${#array[*]}; ++i ))
    do
        echo ${array[i]}
    done
    

    字符串拼接与遍历

    paths="$paths header/"
    paths="$paths include/"
    for (( i = 0; i < ${#paths[*]}; ++i ))
    do
        echo ${paths[i]}
    done
    

    递归查找文件

    find ./ -name "*.*"
    

    递归查找多种后缀的文件

    find ./ -regex ".*\.\(sh\|md\)"
    

    将命令行输出结果保存到变量中

    szResult=`file --mime-encoding README.md`
    echo $szResult
    

    或:

    szResult=$(file --mime-encoding README.md)
    echo $szResult
    

    获取上一条命令的运行结果

    使用$?获取数值结果。与获取输出结果不同。

    字符串匹配判断

    szResult=`file --mime-encoding README.md`
    hasUTF8=`echo $szResult | awk '{print match($0, utf-8)}'`
    echo $hasUTF8
    if [[ $hasUTF8 -gt 0 ]];
    then
        echo README.md is UTF-8
    fi
    

    文件或文件夹判断

    if test -f $file
    then
        echo $file is a file.
    elif test -d $file
    then
        echo $file is a directory.
    fi
    

    2.基本遍历

    遍历一级文件

    需要同时遍历文件夹时,通配符改为*

    for file in *.*
    do
        echo $file
    done
    

    递归遍历文件

    需要同时遍历文件夹时,通配符改为*

    for file in `find ./ -name "*.*"` 
    do
        echo $file
    done
    

    3.搭配使用

    批量转码

    例如,我们需要将UTF-8的h文件和cpp文件转换成ascii。
    这里我们需要从$?获取iconv命令的运行结果来判断,是否运行成功,避免仅转换到半截文本。

    szRootPath=./
    szFileFilter=".*\.\(h\|cpp\)"
    for file in `find $szRootPath -regex "$szFileFilter"`
    do
        szResult=`file --mime-encoding $file`
        hasUTF8=`echo $szResult | awk '{print match($0, utf-8)}'`
        if [[ $hasUTF8 -gt 0 ]];
        then
            szIconvResult=$(iconv -f UTF-8 -t GB2312 $file > UTF-8_FILE)
            if [[ $? -eq 0 ]];
            then
                echo $szResult
                cp UTF-8_FILE $file
            else
                echo $szIconvResult
            fi
        fi
    done
    

    VSCode使用一键输入代码进行快速编写

    可将下方的基本遍历的代码直接配置到shellscript.json中,方便随时编写使用

    {
        "for_iterate_files_recursively" : {
            "prefix": "forfr",
            "body": [
                "for file in `find ./ -name \"*.*\"` ",
                "do",
                "    echo $$file",
                "done",
            ],
            "description": "递归遍历文件"
        },
    
        "for_iterate_files" : {
            "prefix": "forf",
            "body": [
                "for file in *.*",
                "do",
                "    echo $$file",
                "done",
            ],
            "description": "遍历一级文件"
        },
    }
    

    相关文章

      网友评论

          本文标题:shell搭配工具遍历文件使用示例

          本文链接:https://www.haomeiwen.com/subject/ltsogrtx.html