BASH - 使用选择菜单导航目录

时间:2018-03-29 22:52:21

标签: bash

我正在使用Ubuntu server,我想创建BASH脚本,这将帮助我轻松浏览目录。

我找到了这段代码,我正在使用:

#!/bin/bash
cd ~/ftp/server/googledrive

prompt="Please select a file:"
options=( $(ls -1) )

PS3="$prompt "
select opt in "${options[@]}" "Quit" ; do
    if (( REPLY == 1 + ${#options[@]} )) ; then
        exit

    elif (( REPLY > 0 && REPLY <= ${#options[@]} )) ; then
        echo  "You picked $opt which is file $REPLY"
        break

    else
        echo "Invalid option. Try another one."
    fi
done

但是它只列出了目录,每个目录都有相应的编号。是否有可能以我可以实际浏览目录的方式制作它?

编辑:感谢您的评论。我应该在创建帖子时这样做。

通过“实际导航”我的意思是:主要目标是能够选择.zip存档并将其解压缩到特定文件夹中,从而导航部分。因此,您必须从目录A导航到B然后再导航到C.从第一个目录开始,您将列出所有目录,并且每个目录都有一个唯一编号,通过选择一个编号,您将导航到该特定目录。这将重复,直到您找到所需的目录,然后选择“在此解压缩”选项。

3 个答案:

答案 0 :(得分:1)

只是一个简单的例子来给你一些想法。输入目录号就可以了。点击 Ctrl + D 会弹回一个级别。

#!/bin/sh

function selector {
    select name in *; do
        if [ -d "$name" ]; then
            cd "$name"
            selector
            cd ..
        fi
    done
}

selector

答案 1 :(得分:0)

这是针对帖子中描述的类似要求的解决方案。

在我的情况下,我有一组我经常导航到的首选目录。我将这个目录列表保存在名为~/dirs.txt

的文件中

~/.bashrc中,我设置了2个别名来支持访问目录列表:

  
      
  1. 添加父目录apd
  2.         

    将当前路径I添加到~/dirs.txt文件

~~~

  
      
  1. 更改当前目录ccd
  2.         

    将每一行列为菜单选项,并从所选的选项中列出 - 然后导航到该菜单项的目录

alias apdnwln="echo '  '  >> ~/dirs.txt"
alias apd=" pwd >> ~/dirs.txt; apdnwln"
alias ccd="showCcdMenu"

showCcdMenu(){

  echo "----------------"
  echo "    Go To path: "
  echo "----------------"
  echo ""

  dirsFile='/Users/someusername/dirs.txt'
  IFS=$'\n'       # make newlines the only separator
  set -f          # disable globbing

  count=0
  for i in $(cat < "$dirsFile"); do
    count=$((count+1))

    if [[ ( "$count"  -lt "10" ) ]] ; then

      printf " "
    fi

    echo " $count : $i"
  done

  printf "\n"
  echo "Enter your choice"
  read itemChoice
  echo "your choice: $itemChoice"
  #echo $answer

  count=0
  for i in $(cat < "$dirsFile"); do
    count=$((count+1))

    if [[ ( "$count"  -eq "$itemChoice" ) ]] ; then

      echo " going to dir: $i"
      cd $i
      break
    fi
  done
}

以下SO(&amp; Co.)帖子提出了这个问题。可能......谢谢!

答案 2 :(得分:0)

该项目为cd历史记录创建了一个出色的菜单。

https://github.com/xhawk18/fast_cd_menu

要安装它,请尝试---

curl -o- https://raw.githubusercontent.com/xhawk18/fast_cd_menu/master/install.sh | bash