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

说明

运行环境:Windows 10

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

常用语句

数组拼接与遍历
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

基本遍历

遍历一级文件

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

for file in *.*
do
    echo $file
done
递归遍历文件

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

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

搭配使用

批量转码

例如,我们需要将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": "遍历一级文件"
	},
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值