GNU/Linux >> Znalost Linux >  >> Linux

Fuzzy vyhledávání souborů v linuxové konzoli

Většina těchto odpovědí neprovádí fuzzy vyhledávání, jako to dělá vznešený text – mohou se shodovat s částí odpovědi, ale nedělají to hezké chování „prostě najdi všechna písmena v tomto pořadí“.

Myslím, že je to trochu blíž tomu, co chcete. Dal jsem dohromady speciální verzi cd ('fcd'), která používá fuzzy vyhledávání k nalezení cílového adresáře. Super jednoduché – stačí přidat toto do svého bashrc:

function joinstr { local IFS="$1"; shift; echo "$*"; }
function fcd { cd $(joinstr \* $(echo "$*" | fold -w1))* }

To přidá * mezi každé písmeno ve vstupu, takže pokud chci přejít například na,

/home/dave/results/sample/today

Můžu napsat cokoliv z následujícího:

fcd /h/d/r/spl/t
fcd /h/d/r/s/t
fcd /h/d/r/sam/t
fcd /h/d/r/s/ty

Použijeme-li první jako příklad, spustí se cd /*h*/*d*/*r*/*s*p*l*/*t* a nechte shell vyřešit, co se vlastně shoduje.

Pokud je první znak správný a je zapsáno jedno písmeno z každého adresáře v cestě, najde to, co hledáte. Možná si to můžete přizpůsobit pro své potřeby? Důležitý je:

$(joinstr \* $(echo "$*" | fold -w1))*

který vytvoří fuzzy vyhledávací řetězec.


Může se vám hodit fzf. Je to univerzální fuzzy vyhledávač napsaný v Go, který lze použít s jakýmkoli seznamem věcí:soubory, procesy, historie příkazů, větve git atd.

Jeho instalační skript nastaví CTRL-T klíčenka pro váš shell. Následující GIF ukazuje, jak to funguje.


Obvykle používám:

ls -R | grep  -i [whatever I can remember of the file name]

Z adresáře výše, kde očekávám, že bude soubor - čím výše se ve stromu adresářů dostanete, tím pomaleji to půjde.

Když najdu přesný název souboru, použiji ho v find:

find . [discovered file name]

To by se dalo sbalit do jednoho řádku:

for f in $(ls --color=never -R | grep --color=never -i partialName); do find -name $f; done

(Našel jsem problém s aliasem ls a grep na "--color=auto")


Linux
  1. Jak najít soubor v Linuxu

  2. Jak najít nejstarší soubor ve stromu adresářů v Linuxu

  3. Linux najít/vyhledat POUZE kořenový oddíl?

  1. Jak vyhledávat a odstraňovat adresáře rekurzivně v systému Linux

  2. 10 Find Commands pro zlepšení vyhledávání souborů v Linuxu [Základy]

  3. Linux – Jak zjistit datum vytvoření souboru?

  1. Najděte soubor pomocí příkazů Najít a najít v Linuxu

  2. Najděte soubor a poté cd do tohoto adresáře v Linuxu

  3. Linux odstranit soubor s velikostí 0