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

如何实现两级交互式Bash脚本:文件夹与子文件夹选择

实现交互式两级目录选择的Bash脚本

核心思路

用Bash的select命令实现交互式菜单,结合目录遍历命令动态获取两级目录列表,最后用选中的路径执行后续操作。

完整脚本示例

#!/bin/bash

# 第一级目录选择:动态获取apps/下的子文件夹
echo "请选择第一级目录:"
# 用find命令获取apps下的直接子目录,排除apps本身,提取纯目录名
mapfile -t first_level_dirs < <(find apps -maxdepth 1 -type d ! -name 'apps' -printf "%f\n")

# 无第一级目录时直接退出
if [ ${#first_level_dirs[@]} -eq 0 ]; then
    echo "错误:apps/下没有子文件夹"
    exit 1
fi

# 生成交互式选择菜单
select first_dir in "${first_level_dirs[@]}" "取消"; do
    if [ "$first_dir" = "取消" ]; then
        echo "操作已取消"
        exit 0
    elif [ -n "$first_dir" ]; then
        echo "已选择第一级目录:$first_dir"
        break
    else
        echo "无效选项,请重新输入"
    fi
done

# 第二级目录选择:动态获取选中第一级目录下的子文件夹
echo -e "\n请选择第二级目录:"
mapfile -t second_level_dirs < <(find "apps/$first_dir" -maxdepth 1 -type d ! -name "$first_dir" -printf "%f\n")

# 无第二级目录时直接退出
if [ ${#second_level_dirs[@]} -eq 0 ]; then
    echo "错误:apps/$first_dir/下没有子文件夹"
    exit 1
fi

select second_dir in "${second_level_dirs[@]}" "取消"; do
    if [ "$second_dir" = "取消" ]; then
        echo "操作已取消"
        exit 0
    elif [ -n "$second_dir" ]; then
        echo "已选择第二级目录:$second_dir"
        break
    else
        echo "无效选项,请重新输入"
    fi
done

# 执行后续操作:替换为你的实际业务逻辑
echo -e "\n开始执行后续操作,目标路径:apps/$first_dir/$second_dir"
# 示例操作:列出目标目录内容
ls -la "apps/$first_dir/$second_dir"

关键细节说明

  • 动态目录获取:用find命令替代硬编码,-maxdepth 1确保只获取直接子目录,-printf "%f\n"提取纯目录名,避免空格或特殊字符导致的路径解析问题。
  • 数组存储目录:用mapfile -t将目录名存入数组,完美兼容带空格的目录名称(比如My Project这类名称)。
  • 交互式菜单:select命令自动生成带编号的选择菜单,用户只需输入编号即可完成选择;加入"取消"选项提升脚本易用性。
  • 错误处理:检查目录是否存在,避免空菜单导致的脚本异常退出。

自定义修改点

  • 将后续操作部分的ls -la替换为你的实际业务逻辑,比如部署脚本、打包命令、文件同步等。
  • 如果需要支持更多级目录选择,可将选择逻辑封装为函数,通过递归调用实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:31:21