GNU/Linux >> Linux Esercitazione >  >> Linux

Ricerca di file fuzzy nella console Linux

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")


Linux
  1. Come cercare e rimuovere le directory in modo ricorsivo su Linux

  2. 10 comandi Trova per migliorare la ricerca di file in Linux [Nozioni di base]

  3. Trova un file con i comandi Trova e individua in Linux

  4. Trova il file quindi cd in quella directory in Linux

  5. Linux elimina il file con dimensione 0

Come trovare file basati su timestamp in Linux

Come trovare file contenenti una stringa di testo specifica in Linux

Come trovare i file modificati nelle ultime 24 ore in Linux

Come trovare le righe più lunghe in un file in Linux

Trova comando in Linux/UNIX

Come eseguire una ricerca di file fuzzy in Linux