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

Ubuntu Server下基于选择菜单的目录导航BASH脚本求助

实用的Bash目录导航菜单脚本优化方案

首先,你的原脚本已经搭好了基础的选择菜单框架,但存在几个影响实用性的小问题:比如没法处理带空格的文件名、只能单次选择后退出、没有真正实现目录跳转功能。下面是适配Ubuntu Server环境的优化版本,解决这些问题的同时让导航更顺手:

#!/bin/bash

# 初始目录,可根据你的需求修改
current_dir="$HOME/ftp/server/googledrive"

# 定义核心导航函数
navigate_dir() {
    while true; do
        # 安全获取当前目录下的所有条目(避免空格/特殊字符分割错误)
        options=()
        while IFS= read -r -d $'\0' item; do
            # 提取条目名称(去掉完整路径前缀)
            item_name="${item##*/}"
            options+=("$item_name")
        done < <(find "$current_dir" -maxdepth 1 -mindepth 1 -print0 | sort -z)

        # 添加实用操作选项
        options+=("返回上一级目录" "退出导航")

        echo -e "\n当前目录: $current_dir"
        prompt="请选择要进入的目录或操作:"
        PS3="$prompt "

        select opt in "${options[@]}"; do
            case $REPLY in
                # 处理退出导航
                $((${#options[@]})))
                    echo "退出导航..."
                    exit 0
                    ;;
                # 处理返回上一级目录
                $((${#options[@]}-1)))
                    if [ "$current_dir" = "/" ]; then
                        echo "已经在根目录,无法返回上一级"
                    else
                        current_dir=$(dirname "$current_dir")
                    fi
                    break
                    ;;
                # 处理目录选择
                [1-$(( ${#options[@]}-2 ))])
                    selected_item="$current_dir/${options[$((REPLY-1))]}"
                    # 只允许进入目录,跳过文件
                    if [ -d "$selected_item" ]; then
                        current_dir="$selected_item"
                    else
                        echo "⚠️  '$selected_item' 不是目录,无法进入"
                    fi
                    break
                    ;;
                *)
                    echo "❌ 无效选择,请重新输入"
                    ;;
            esac
        done
    done
}

# 启动导航功能
navigate_dir

关键改进点说明:

  • 完美兼容特殊文件名:用find -print0搭配read -d $'\0'的组合,彻底解决了原脚本中ls会按空格分割文件名的问题,带空格、换行符的目录名也能正常识别
  • 支持连续导航:通过while true循环实现连续目录跳转,不用每次重启脚本
  • 智能区分目录/文件:自动判断选中条目是否为目录,避免误操作进入文件
  • 新增返回上一级功能:补充了返回上级目录的选项,导航逻辑更完整
  • 友好交互提示:显示当前目录、错误提示信息,提升使用体验

使用步骤:

  1. 将脚本保存为dir_navigator.sh
  2. 赋予执行权限:chmod +x dir_navigator.sh
  3. 直接运行即可开始导航:./dir_navigator.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:05:20