La maggior parte di queste risposte non eseguirà ricerche confuse come fa il testo sublime:potrebbero corrispondere a parte della risposta, ma non fanno il simpatico comportamento "trova tutte le lettere in questo ordine".
Penso che questo sia un po' più vicino a quello che vuoi. Ho messo insieme una versione speciale di cd ('fcd') che utilizza la ricerca fuzzy per trovare la directory di destinazione. Super semplice -- basta aggiungere questo al tuo bashrc:
function joinstr { local IFS="$1"; shift; echo "$*"; }
function fcd { cd $(joinstr \* $(echo "$*" | fold -w1))* }
Questo aggiungerà un * tra ogni lettera nell'input, quindi se voglio andare a, per esempio,
/home/dave/results/sample/today
Posso semplicemente digitare uno dei seguenti:
fcd /h/d/r/spl/t
fcd /h/d/r/s/t
fcd /h/d/r/sam/t
fcd /h/d/r/s/ty
Usando il primo come esempio, questo eseguirà cd /*h*/*d*/*r*/*s*p*l*/*t*
e lascia che la shell risolva ciò che effettivamente corrisponde.
Finché il primo carattere è corretto e viene scritta una lettera da ogni directory nel percorso, troverà quello che stai cercando. Forse puoi adattarlo alle tue esigenze? La parte importante è:
$(joinstr \* $(echo "$*" | fold -w1))*
che crea la stringa di ricerca fuzzy.
Potresti trovare utile fzf. È un cercatore fuzzy generico scritto in Go che può essere utilizzato con qualsiasi elenco di cose:file, processi, cronologia dei comandi, rami git, ecc.
Il suo script di installazione configurerà CTRL-T
associazione di tasti per la tua shell. La seguente GIF mostra come funziona.
Di solito uso:
ls -R | grep -i [whatever I can remember of the file name]
Da una directory sopra dove mi aspetto che sia il file - più in alto vai nell'albero delle directory, più lentamente andrà.
Quando trovo il nome esatto del file, lo uso in find:
find . [discovered file name]
Questo potrebbe essere compresso in una riga:
for f in $(ls --color=never -R | grep --color=never -i partialName); do find -name $f; done
(Ho riscontrato un problema con ls e grep alias di "--color=auto")