You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多文件夹路径纳入Shell变量$FILES以获取多文件夹的.c文件

多文件夹文件纳入Shell脚本$FILES变量的几种方法

嘿,这个问题太常见了,我给你几个实用的方案,你根据自己的场景挑就行:

1. 直接在变量中列出多个路径模式

这是最直接的方式,如果你只有几个固定的文件夹,直接把所有路径模式写在FILES变量里就行:

# 把需要的文件夹路径都加进去,用空格分隔
FILES="./binBuild/*.c ./src/*.c ./utils/*.c ./modules/*.c"

# 遍历处理每个文件
for file in $FILES; do
    # 这里写你的处理逻辑,比如编译、打印等
    echo "正在处理文件: $file"
done

⚠️ 注意:如果文件名包含空格,这种方式可能会出问题,这时候建议用下面的数组方法。

2. 使用数组存储(更安全,支持带空格的文件名)

数组是Shell脚本中处理多个元素的最佳实践,尤其是文件名可能有空格的情况:

# 定义数组,每个路径模式占一行,清晰易维护
FILES=(
    "./binBuild/*.c"
    "./src/*.c"
    "./utils/**/*.c"  # 用**可以递归匹配该文件夹下所有子目录的.c文件(需要bash开启globstar)
)

# 开启递归匹配(如果需要的话)
shopt -s globstar

# 遍历数组,注意用"${FILES[@]}"来保留每个元素的完整性
for file in "${FILES[@]}"; do
    # 示例:编译.c文件为.o文件
    gcc -c "$file" -o "${file%.c}.o"
done

如果不需要递归,就去掉**和shopt -s globstar这两行就行。

3. 先定义文件夹列表,再生成文件路径

如果你的文件夹数量很多,或者需要动态调整文件夹列表,可以先单独存文件夹,再批量生成文件路径:

# 先列出所有要包含的文件夹
FOLDERS=(
    "./binBuild"
    "./src"
    "./utils"
    "./test"
)

# 初始化空数组存储文件路径
FILES=()

# 遍历每个文件夹,添加对应的.c文件路径
for folder in "${FOLDERS[@]}"; do
    FILES+=("$folder"/*.c)
done

# 处理文件
for file in "${FILES[@]}"; do
    echo "处理中: $file"
done

额外技巧:避免空匹配问题

如果某个文件夹下没有.c文件,默认情况下Shell会把*.c当成一个文件名来处理,这时候可以开启nullglob选项,让没有匹配的通配符直接被忽略:

# 开启nullglob
shopt -s nullglob

# 之后再定义FILES或者处理文件,空文件夹就不会产生无效的"*.c"条目了
FILES="./binBuild/*.c ./src/*.c"

内容的提问来源于stack exchange,提问作者218

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:40:26