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

說明

運行環(huán)境:Windows 10

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

1.常用語句

數(shù)組拼接與遍歷

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\)"

將命令行輸出結(jié)果保存到變量中

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

或:

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

獲取上一條命令的運行結(jié)果

使用$?獲取數(shù)值結(jié)果。與獲取輸出結(jié)果不同。

字符串匹配判斷

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.搭配使用

批量轉(zhuǎn)碼

例如,我們需要將UTF-8的h文件和cpp文件轉(zhuǎn)換成ascii。
這里我們需要從$?獲取iconv命令的運行結(jié)果來判斷,是否運行成功,避免僅轉(zhuǎn)換到半截文本。

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": "遍歷一級文件"
    },
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容