GNU/Linux >> Tutoriales Linux >  >> Linux

Búsqueda difusa de archivos en la consola de Linux

La mayoría de estas respuestas no harán búsquedas difusas como lo hace el texto sublime; pueden coincidir con parte de la respuesta, pero no tienen el agradable comportamiento de 'solo encuentra todas las letras en este orden'.

Creo que esto está un poco más cerca de lo que quieres. Preparé una versión especial de cd ('fcd') que utiliza la búsqueda difusa para encontrar el directorio de destino. Súper simple:solo agrega esto a tu bashrc:

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

Esto agregará un * entre cada letra en la entrada, por lo que si quiero ir, por ejemplo,

/home/dave/results/sample/today

Puedo escribir cualquiera de los siguientes:

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 el primero como ejemplo, esto ejecutará cd /*h*/*d*/*r*/*s*p*l*/*t* y deja que el caparazón determine lo que realmente coincide.

Siempre que el primer carácter sea correcto y se escriba una letra de cada directorio en la ruta, encontrará lo que está buscando. ¿Quizás puedas adaptar esto a tus necesidades? Lo importante es:

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

que crea la cadena de búsqueda aproximada.


Puede encontrar fzf útil. Es un buscador difuso de propósito general escrito en Go que se puede usar con cualquier lista de cosas:archivos, procesos, historial de comandos, ramas de git, etc.

Su script de instalación configurará CTRL-T combinación de teclas para su shell. El siguiente GIF muestra cómo funciona.


Usualmente uso:

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

Desde un directorio por encima de donde espero que esté el archivo:cuanto más arriba vaya en el árbol de directorios, más lento irá.

Cuando encuentro el nombre exacto del archivo, lo uso en find:

find . [discovered file name]

Esto podría colapsarse en una sola línea:

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

(Encontré un problema con ls y grep con alias "--color=auto")


Linux
  1. Cómo encontrar un archivo en Linux

  2. Cómo encontrar el archivo más antiguo en un árbol de directorios en Linux

  3. Linux:¿cómo encontrar la fecha de creación del archivo?

  4. Encuentre el archivo y luego cd a ese directorio en Linux

  5. Linux eliminar archivo con tamaño 0

Cómo encontrar archivos basados ​​en la marca de tiempo en Linux

Cómo encontrar archivos que contengan una cadena de texto específica en Linux

Cómo encontrar archivos modificados en las últimas 24 horas en Linux

Cómo encontrar las líneas más largas en un archivo en Linux

Buscar comando en Linux/UNIX

Cómo hacer una búsqueda difusa de archivos en Linux