bash: Buscando con ls

1

¿Hay un comando de bash que se pueda usar como Spotlight o una opción con ls que solo imprima archivos que contengan cierto texto? Quiero poder abrir Terminal y escribir algo ls -SOMEOPTION filename y encontrar todos los archivos que tengan filename en su nombre, y esta opción podría usarse con -R y funcionaría como un reemplazo para Spotlight.

    
pregunta Arc676 07.11.2013 - 15:07

3 respuestas

1

Para encontrar todos los archivos que contienen una determinada cadena, puedes usar solo grep por sí mismo:

grep -R /path/to/directory "myword"

En el ejemplo anterior, "myword" es lo que está buscando, y /path/to/directory es el directorio en el que desea buscar. -R le dice a grep que ejecute una búsqueda recursiva (es decir, que comience en la ruta que especificó e ingrese en cada subdirectorio allí).

EDIT

He releído tu pregunta y creo que estás buscando cómo encontrar archivos que tengan un nombre de archivo determinado. Para este uso:

find /path/to/directory -name "*glob*" -print

donde /path/to/directory es donde desea iniciar su búsqueda (y find también buscará en los subdirectorios) y "*glob*" es un nombre de archivo completo o parcial que desea buscar. Tenga en cuenta que puede usar caracteres comodín ( . y * para cualquier coincidencia de uno o varios caracteres, respectivamente) en el globo. Como una variación de esto, puede usar, como lo proponen otros:

find /path/to/directory -name "*glob*" -exec ls -la {} \;

en lo anterior, lo que coloca después de la opción -exec es cualquier comando de UNIX con parámetros (en este caso ls -la ). El {} será sustituido por el nombre de archivo que find encuentra, y el \; es una cadena de terminación.

EDIT 2

Tenga en cuenta que los comandos anteriores le dan resultados similares a Spotlight, pero no usan Spotlight en absoluto.

Si desea usar Spotlight desde la línea de comandos, puede usar el comando mdfind , que es una interfaz de línea de comandos para Spotlight. Escribir mdfind por sí solo le dará una ayuda rápida para usarlo con algunos ejemplos. man mdfind le dará un manual más detallado para ello.

Esencialmente, mdfind toma una cadena de búsqueda (y modificadores opcionales) como argumento y es lo mismo que escribiría en el campo de texto de Spotlight cuando lo use en una GUI.

    
respondido por el mike 07.11.2013 - 15:37
4
 find . -type f -name "*filename*" -exec grep -il 'mywordinthefile' {} \;
  • find busca archivos de forma recursiva en un directorio.

  • Los primeros parámetros es el directorio en el que desea buscar. Aquí está . , por lo tanto, el directorio actual. Podría usar ~/Documents por ejemplo o cualquier otro directorio.

  • La opción
  • -type f- es devolver solo archivos, no directorios.

  • La opción

    -name toma un patrón para encontrar nombres de archivos específicos.

  • grep se usa aquí para encontrar la palabra / patrón que desea en los archivos encontrados por find .

respondido por el Matthieu Riegler 07.11.2013 - 15:11
0

Para buscar archivos con una cadena específica en el nombre de archivo, use

    find . -type f -name '*<filename>*' 2> /dev/null

Sustituya <filename> con la cadena que desea buscar en el nombre del archivo. La redirección al final es evitar errores de impresión cuando ciertos archivos / carpetas no son accesibles.

Puede poner este comando en un script de shell, llamado, por ejemplo, lsf que contendría lo siguiente:

find . -type f -name "*$1*" 2> /dev/null

Luego hazlo ejecutable usando

chmod +x lsf

También puede poner esto en su archivo ~/.bashrc o ~/.bash_profile en lugar de un script de shell como se describe anteriormente (el comando todavía se llama lsf aquí):

myls()
{
    find . -type f -name "*$1*" 2> /dev/null
}
alias lsf=myls
    
respondido por el M K 07.11.2013 - 17:36

Lea otras preguntas en las etiquetas