GNU/Linux >> Tutoriels Linux >  >> Linux

Recherche de fichiers flous dans la console Linux

La plupart de ces réponses ne feront pas de recherche floue comme le fait le texte sublime - elles peuvent correspondre à une partie de la réponse, mais elles ne font pas le joli comportement "recherchez simplement toutes les lettres dans cet ordre".

Je pense que c'est un peu plus proche de ce que tu veux. J'ai créé une version spéciale de cd ("fcd") qui utilise la recherche floue pour trouver le répertoire cible. Super simple - ajoutez simplement ceci à votre bashrc :

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

Cela ajoutera un * entre chaque lettre dans l'entrée, donc si je veux aller, par exemple,

/home/dave/results/sample/today

Je peux simplement taper n'importe lequel des éléments suivants :

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

En utilisant le premier comme exemple, cela exécutera cd /*h*/*d*/*r*/*s*p*l*/*t* et laissez le shell trier ce qui correspond réellement.

Tant que le premier caractère est correct et qu'une lettre de chaque répertoire du chemin est écrite, il trouvera ce que vous cherchez. Peut-être pouvez-vous l'adapter à vos besoins ? Le bit important est :

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

qui crée la chaîne de recherche floue.


Vous pouvez trouver fzf utile. C'est un chercheur flou à usage général écrit en Go qui peut être utilisé avec n'importe quelle liste de choses :fichiers, processus, historique des commandes, branches git, etc.

Son script d'installation configurera CTRL-T raccourci clavier pour votre shell. Le GIF suivant montre comment cela fonctionne.


J'utilise habituellement :

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

À partir d'un répertoire au-dessus où je m'attends à ce que le fichier soit - plus vous montez dans l'arborescence des répertoires, plus cela va être lent.

Quand je trouve le nom exact du fichier, je l'utilise dans find :

find . [discovered file name]

Cela pourrait être réduit en une seule ligne :

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

(J'ai trouvé un problème avec ls et grep étant alias "--color=auto")


Linux
  1. Comment rechercher et supprimer des répertoires de manière récursive sous Linux

  2. Comment trouver un fichier sous Linux

  3. Comment trouver le fichier le plus ancien dans une arborescence de répertoires sous Linux

  4. 10 commandes de recherche pour améliorer votre recherche de fichiers sous Linux [Basics]

  5. Linux – Comment trouver la date de création du fichier ?

Comment trouver des fichiers basés sur l'horodatage sous Linux

Comment trouver des fichiers contenant une chaîne de texte spécifique sous Linux

Comment trouver des fichiers modifiés au cours des dernières 24 heures sous Linux

Comment trouver la ou les lignes les plus longues dans un fichier sous Linux

Rechercher la commande sous Linux/UNIX

Comment faire une recherche floue de fichiers sous Linux