Bash

Bash 腳本選擇文件夾

  • September 1, 2020

我正在嘗試首先使用列出所有目錄最新修改的文​​件夾select,但我被卡住了。

假設我有:

Folder1
ThisIsAnotherDir
Directory
New Directory
This IS not_Same Directory

當我執行以下命令時:

ls -t -d */ 

我得到了想要的輸出。

但是當我使用select

options=$(ls -t -d */)
select d in $options; do test -n "$d" && break; echo ">>> Wrong Folder Selection!!! Try Again"; done

它列出了首先修改的文件夾,但是,如果我New Directory最後修改並執行它,它會輸出:

1)New 
2)Directory
3)Folder1
4)ThisIsAnotherDir
5)Directory
6)This 
7)IS 
8)not_Same 
9)Directory

我也試過:

select d in "$options[0]"; do test -n "$d" && break; echo ">>> Wrong Folder Selection!!! Try Again"; done

它也失敗了。

我希望這是有道理的。謝謝

將https://unix.stackexchange.com/a/378304/330217中的答案與您的ls -t命令相結合,您可以嘗試

IFS= mapfile -t files < <(ls -t -d */)

select d in "${files[@]}"
do
   test -n "$d" && break
   echo ">>> Wrong Folder Selection!!! Try Again"
done

請注意,如果您的目錄名稱中包含換行符(或其他特殊字元),則此解決方案不起作用。

引用自:https://unix.stackexchange.com/questions/607308