切換到第x目錄終端

切換到第x目錄終端

在unix shell(特別是Ubuntu)中是否有一種方法可以將目錄更改為從ls命令列印的xth目錄?我知道您可以透過多種方式對目錄進行排序,但是使用 ls 的輸出來獲取第 x 個目錄?

一個外殼範例:

$ ls
$ first_dir second_dir third_really_long_and_complex_dir

我想透過傳遞 3 (或正確數組格式的 2)進入third_really_long_and_complex_dir。我知道我可以簡單地複製和貼上,但如果我已經使用鍵盤,如果我知道索引,那麼輸入「cdls 2」或類似的內容會更容易。

更新

對於仍然看到這一點的人,當我對 linux/bash 非常陌生並且沒有意識到存在製表符完成這樣的事情時,我創建了這個問題。

答案1

互動式會話中的主要問題cd是您通常想要更改正在處理命令提示字元的 shell 的目前目錄。這意味著啟動子 shell(例如腳本)不會有幫助,因為任何cd呼叫都不會影響父 shell。

但是,根據您使用的 shell,您也許可以定義一個功能去做這個。例如在 bash 中:

function cdls() {
    # Save the current state of the nullglob option
    SHOPT=`shopt -p nullglob`

    # Make sure that */ expands to nothing when no directories are present
    shopt -s nullglob

    # Get a list of directories
    DIRS=(*/)

    # Restore the nullblob option state
    $SHOPT

    # cd using a zero-based index
    cd "${DIRS[$1]}"
}

請注意,在這個範例中,我絕對拒絕解析 的輸出ls由於多種原因。相反,我讓 shell 本身檢索目錄列表(或目錄連結)...

也就是說,我懷疑使用這個函數(或任何具有此效果的函數)是一個非常好的方法,可以讓自己陷入巨大的混亂 - 就像rm在更改到錯誤的目錄後使用一樣。檔案名稱自動完成已經夠危險的了,不用強迫自己數數

答案2

我有一個函數:

   函數 cdi. {
       IFS=$'\n'
       頁=${1:-1}
       LPP=${2:-11}
       首先=$(( 1 + LPP * 頁 - LPP ))
       最後=$((LPP * 頁))
       在 $(find . -maxdepth 1 -type d -printf "%P\n" |\ 中選擇 cd_into
             sed -n $first,${last}p);
           退出=-1;
           如果 [[ $REPLY == n ]];然後讓 PAGE=PAGE+1; cdi。 $頁$LPP;退出=$?
         elif [[ $REPLY == p ]];然後讓 PAGE=PAGE-1; cdi。 $頁$LPP;退出=$?
         elif [[ $REPLY == m ]];則令LPP=LPP*2; cdi。 $頁$LPP;退出=$?
         elif [[ $REPLY == l ]];則令LPP=LPP/2; cdi。 $頁$LPP;退出=$?
         elif [[ $REPLY == q || $REPLY == 0]];然後回傳0;菲

           如果 [ $EXIT -eq 0 ];然後返回0;菲

           cd_into=${cd_into//\~/$HOME}
           如果 [ -d "$cd_into" ];那麼
               cd“$cd_into”;返回0;別的
               echo "哎呀!\`$cd_into'不是一個資料夾(?)"
       完畢
       未設定 IFS
   }

使用方法:

$cdi。
1) .mozilla.new 3) .swt 5) tmp 7) .vim 9) .ssh
2) .crack-attack 4) 下載 6) .Eterm 8) .frozen-bubble 10) .irssi
哪個 #?

相關內容