Bash

使用給定名稱 cd 到最近的目錄的使用者函式

  • August 28, 2019

任何人都可以將使用者定義的函式放入我的 .basrc 中來執行此操作。下面的例子應該解釋我的想法。

給定以下文件系統:

   Level1   Level2  Level3
 / TestA
~ - TestB   
 \ TestC  - TestB
          - TestD - CurrentLocation

假設該函式被稱為 goto。

goto(TestA): 應該 cd 我們到 level1 testA 目錄

goto(TestZ): 應該讓我們保持在原處並列印類似“未找到”的

內容 goto(TestB): 應該把我們帶到 level2 testB 作為它最接近的地方。

搜尋應該只向上而不是向下進入父目錄,因為這可能匹配多個文件。

謝謝

試試這個,

cdd(){
depth=$(pwd | tr -dc '/' | wc -c)
for ((d=0;d<=depth;d++)); do
   [ $d -eq 0 ] && search_dir="." || search_dir=$(printf '../%.0s' $(seq 1 $d))
   res=( )
   while IFS= read -r -d '' item; do
       res+=( "$item" )
   done < <(find $search_dir -mindepth 1 -maxdepth 1 -type d -name "$1" -print0)
   if [ ${#res[@]} -eq 0 ]; then
       continue
   elif [ ${#res[@]} -eq 1 ]; then
       t="$res"
   elif [ ${#res[@]} -gt 1 ]; then
       select t in "${res[@]}"; do
           break
       done
   fi
   echo "$t"
   cd "$t" && return || { echo "Unknown Error"; return; }
done
echo "Not found"
}

對於每個循環,它將在樹上再搜尋一個文件夾,直到$depth到達與根文件夾等效的文件夾/

用法:cdd targetname

例子:

$ cdd home
../../../home

如果找到多個目錄,它將顯示一個select菜單。

$ cdd "D*"
1) ../Documents
2) ../Downloads
3) ../Desktop
#? 2
../Downloads

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