これらの回答のほとんどは、崇高なテキストのようにあいまい検索を行いません。回答の一部に一致する場合がありますが、「この順序ですべての文字を検索する」という優れた動作は行いません。
これはあなたが望むものに少し近いと思います。あいまい検索を使用してターゲット ディレクトリを見つける特別なバージョンの cd ('fcd') をまとめました。とても簡単です -- これを .bashrc に追加するだけです:
function joinstr { local IFS="$1"; shift; echo "$*"; }
function fcd { cd $(joinstr \* $(echo "$*" | fold -w1))* }
これにより、入力の各文字の間に * が追加されるため、たとえば、
/home/dave/results/sample/today
次のいずれかを入力するだけです:
fcd /h/d/r/spl/t
fcd /h/d/r/s/t
fcd /h/d/r/sam/t
fcd /h/d/r/s/ty
例として最初のものを使用すると、これは cd /*h*/*d*/*r*/*s*p*l*/*t*
を実行します 実際に一致するものをシェルに分類させます。
最初の文字が正しく、パス内の各ディレクトリから 1 文字が書かれている限り、探しているものが見つかります。おそらく、これをニーズに合わせて調整できますか?重要な点は次のとおりです:
$(joinstr \* $(echo "$*" | fold -w1))*
あいまい検索文字列を作成します。
fzf が役立つ場合があります。ファイル、プロセス、コマンド履歴、git ブランチなど、あらゆるリストで使用できる、Go で書かれた汎用のファジー ファインダーです。
そのインストール スクリプトは CTRL-T
をセットアップします シェルのキーバインディング。次の GIF は、その仕組みを示しています。
私は通常使用します:
ls -R | grep -i [whatever I can remember of the file name]
ファイルがあると思われる場所の上のディレクトリから - ディレクトリ ツリーの上位に行くほど、これは遅くなります。
正確なファイル名を見つけたら、find で使用します:
find . [discovered file name]
これは 1 行にまとめることができます:
for f in $(ls --color=never -R | grep --color=never -i partialName); do find -name $f; done
(ls と grep が "--color=auto" にエイリアスされていることに問題を発見しました)