最後の文字に基づいてディレクトリにCDを挿入する方法はありますか?

最後の文字に基づいてディレクトリにCDを挿入する方法はありますか?

で始まるディレクトリがありますが、164最後の数桁の数字によって異なります。私は最後の数桁の数字(最後の数字自体ではない場合)に基づいてディレクトリにCDを挿入したいと思います98ディレクトリの最後の数字は一意です。これは可能ですか?最初の数字で始めると、オートコンプリート機能にいくつかの可能性が一覧表示されます164

答え1

Bashの場合はい、ワイルドカードを使用できます。

cd /path/to/*9/

(必要な番号に置き換えてください。9すべてのディレクトリが含まれているディレクトリにある場合は削除できます。)/path/to/164...

式が単一のディレクトリとして解釈されるのに十分に具体的であることを確認する必要があります。それ以外の場合は、cdその引数で指定された最初のディレクトリ(4.4より前のバージョンのBash)に変更されるか、エラーで失敗します(Bash 4.4以降はビルドされています)。とCD_COMPLAINS)。 (2つの引数形式を持つZshまたはKshの場合、cd現在のパスに最初の引数が含まれている場合にのみ誤って呼び出すことができます。)

上記のコマンドを入力した後、実行する前にタブ補完を使用することもできます。複数のディレクトリが一致すると、シェルはそのコマンドをすべて一覧表示します。

答え2

もしそうなら実際に最後の数桁を除くすべての数字を異なるようにするには、cdコマンドでワイルドカード文字を使用できます。たとえば、次のようになります。

cd 164*8

(実際に違いがなければ、シェルはエラーメッセージを生成して警告します)。

答え3

いくつかのカスタムタスクを実行できます。

mycd() {
    local ng=$( shopt -p nullglob )
    shopt -s nullglob
    local status

    local matches=( *"$1"/ )  # directories ending in the parameter
    case ${#matches[@]} in
        0) echo "no directory ends with $1" >&2; status=1 ;;
        1) cd "${matches[0]}"; status=$? ;;
        *) echo "multiple directories end with $1" >&2; status=1 ;;
    esac

    $ng   # restore the previous nullglob setting. specifically unquoted
    return $status
}

mycd 89  # cd to the subdir ending with 89

一致するディレクトリが複数ある場合は、selectステートメントを使用して目的のディレクトリを選択できるように拡張できます。

関連情報