誰かがこれを行うために私の.basrcにカスタム関数を置くことができますか?次の例は私の考えを説明しています。
次のファイルシステムがあると仮定すると、
Level1 Level2 Level3
/ TestA
~ - TestB
\ TestC - TestB
- TestD - CurrentLocation
関数名がgotoだとしましょう。
goto(TestA): レベル 1 testA ディレクトリに移動する必要があります。
goto(TestZ): 現在位置を維持し、「notfound」などの内容を印刷する必要があります。
goto(TestB): 最も近いレベル 2 testB に移動する必要があります。
検索は複数のファイルと一致するため、以下ではなく親ディレクトリにのみ移動できます。
ありがとう
答え1
この試み、
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
各ループについて、ルートフォルダに対応するフォルダに到達するまでツリー内のフォルダをもう1つ検索します/
。
使用法:cdd targetname
例:
$ cdd home
../../../home
複数のディレクトリが見つかると、select
メニューが表示されます。
$ cdd "D*"
1) ../Documents
2) ../Downloads
3) ../Desktop
#? 2
../Downloads