2017-01-13 73 views
0

我想列出當前文件夾在相同的目錄中,並顯示給用戶,要求他們輸入一個數字來選擇正確的文件夾。提示用戶從一組文件夾中選擇需要的文件夾

Please select a Folder eg, 1,2,3. 
1. Folder Name 1 
2. Folder 2 
3. Folder 3. 

我想也可以輸入如1.轉換回實際文件夾的名稱,以便我能

cd ./$foldername/ 

我試過,但沒有成功

#!/bin/bash 
printf "Please select folder:\n" 
select d in */; do test -n "$d" && break; done 
cd "$d" && pwd 

它會拋出一個錯誤「select:not found」 這是爲什麼?我錯在哪裏?

+0

你有沒有嘗試過? – Inian

+0

是...但它失敗了某處 – Sneha

+1

printf「請選擇文件夾:\ n」 select * in * /;測試-n「$ d」&& break;完成 cd「$ d」&& pwd – Sneha

回答

0

這就像你之後的事情嗎?

#put directories into an array 
folder_list=($(find /$foldername/* -maxdepth 0 -type d -exec basename {} \;)) 
#loop the output to prevent errors in the user's input 
while true; do 
    #clear the screen for each loop iteration 
    tput clear 
    #print the contents of the array and number them 
    printf '%s\n' "${folder_list[@]}" | cat -n 
    #read user input and store response as variable 
    read -p $'Please select a Folder eg, 1,2,3.\n>' REPLY 
    #check if variable is zero or not a number, if so restart the loop 
    #check if variable is within the range of array content 
    if ((REPLY)) && ((REPLY<=${#folder_list[@]})); then 
     #if it is then print it out and break the loop 
     echo ${folder_list[$((--REPLY))]} 
     break 
    fi 
    echo "Invalid response" 
done 

值得指出的是,由於雙括號,此方法不可移植。

對所有的編輯抱歉,代碼對我來說效率不夠高。

+0

我實際上想做一個腳本來打印大小,修改時間和從不同文件夾加載的文件的名稱。因此,我希望我的腳本提示用戶從當前目錄中選擇文件夾。 – Sneha

+0

那很好,就像我做的那樣取出數組的結果,然後像'du'或'cd'那樣對它進行操作。原來的問題,我正在回答,但可能會更具體些。 – Alek

相關問題