Bash
使用給定名稱 cd 到最近的目錄的使用者函式
任何人都可以將使用者定義的函式放入我的 .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