comando para buscar archivos buscando solo parte de sus nombres?

23

Diga que hay archivos con nombres:

batman.c
debate.c
cricketbat.c

¿Qué comando y cómo debo usarlo para listar todos estos archivos usando la etiqueta de búsqueda bat ?

    
pregunta srk_cb 08.05.2015 - 12:44

6 respuestas

33

Encontrar archivos con bat Anywhere

Para buscar todos los archivos en cualquier lugar dentro de /path/to/folder cuyos nombres contienen bat , puede usar:

find /path/to/folder -name '*bat*'

Tengo citado el patrón de búsqueda *bat* porque, si se omiten las comillas y los archivos coinciden *bat* en el directorio actual, el shell expandirá *bat* en una lista de ellos y pasará ese a find . Entonces find no funcionaría bien. ( \*bat\* y "*bat*" también funcionan).

Para buscar en la carpeta en la que se encuentra actualmente (por ejemplo, que tiene cd ed), use . , como de costumbre:

find . -name '*bat*'

Para buscar en toda su computadora, use / . Para buscar en su directorio de inicio, use ~ , o el nombre completo de su directorio personal. ( El shell expande ~ en la ruta completa del directorio de inicio).

Ampliar o restringir su búsqueda, en función del nombre

Si desea buscar sin distinguir entre mayúsculas y minúsculas, para que los archivos que contengan BAT , bAt , etc., coincidan, use la prueba -iname en lugar de la prueba -name :

find /path/to/folder -iname '*bat*'

Noté que todos tus archivos terminan en .c . Si solo desea buscar archivos como este, use:

find /path/to/folder -name '*bat*.c'

Noté que todos sus nombres de archivos tienen bat al principio o al final de la parte que precede al sufijo .c . Si desea evitar la coincidencia de archivos como embattled.c , puede usar:

find /path/to/folder -name '*bat.c' -o -name 'bat*.c'

-o es el operador o .

Coincidencia de solo archivos

Para buscar solo archivos regulares --y no carpetas, enlaces simbólicos, y nodos de dispositivos especiales: puede usar -type f . Esto se recomienda con frecuencia y, a veces, es bastante apropiado ... pero a menudo no es lo que realmente desea , especialmente si está ejecutando find con el fin de examinar el resultado usted mismo. Si tuviera un enlace simbólico que coincida con su búsqueda, ¿no le gustaría saberlo?

Si desea buscar archivos regulares y simbólicos, puede usar:

find /path/to/folder -name '*bat*' \( -type f -o -type l \)

Utiliza el operador -o y también paréntesis para la agrupación (que debe citarse para que el intérprete no los trate especialmente, de lo contrario obtendrá un error de sintaxis).

Pero supongamos que solo desea ver enlaces simbólicos que finalmente apuntan a un archivo normal (y no enlaces simbólicos a directorios, nodos de dispositivos, etc.). Eso es aún más simple: use -xtype en lugar de -type . Siempre que no esté ejecutando find con -L flag, -xtype en un enlace simbólico prueba el tipo de archivo al que apunta el enlace.

find /path/to/folder -name '*bat*' -xtype f

Si tiene un enlace simbólico a otro enlace simbólico a un archivo, -xtype f lo emparejará aunque su objetivo directo sea otro enlace simbólico en lugar de un archivo normal. Esto es casi siempre lo que quieres.

A menudo las personas piensan que quieren -type f , pero realmente quieren -xtype f .

Obtener resultados detallados

find acción predeterminada si no especifica uno es -print . Todos los comandos dados arriba son equivalentes a ellos mismos con -print añadidos al final.

find se usa a menudo para ejecutar comandos basados ​​en los archivos encontrados, a menudo, comandos que hacen cambios. Pero también hay otras acciones cuyo propósito es mostrar resultados, además de -print . De particular interés es -ls :

find /path/to/folder -name '*bat*' -ls

Esto proporciona información detallada sobre cada archivo, en un formato de varias columnas, similar a (aunque no exactamente lo mismo) lo que vería al ejecutar ls file .

Lectura adicional

Para obtener más información sobre find y otras formas de buscar archivos, consulte:

respondido por el Eliah Kagan 08.05.2015 - 13:43
16

La forma más fácil es ejecutar

locate bat

De esta forma puede buscar en toda la computadora archivos que contengan "murciélago" en el nombre del archivo

Para actualizar la lista de archivos en su PC, ejecute

updatedb

Ejecute este comando cuando haya agregado recientemente archivos nuevos a su cuenta     

respondido por el Mark Kirby 08.05.2015 - 12:49
14

Abra el terminal y cambie los directorios al directorio desde donde desea comenzar la búsqueda y luego ejecute este comando:

find . -name "*bat*" -type f 

El . inicia el comando de búsqueda desde el directorio actual.
El -name coincide con la cadena bat y distingue entre mayúsculas y minúsculas. ( -iname no distingue entre mayúsculas y minúsculas)
El -type f busca solo archivos.

    
respondido por el karel 08.05.2015 - 12:46
6

Si los archivos están en el directorio actual, use:

$ ls *bat*
batgirl.c  batman.c  batwoman.c  cricketbat.c

O (para tenerlos línea por línea):

$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c

Si desea buscar esos archivos en el sistema, use:

$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
    
respondido por el chaos 08.05.2015 - 13:00
4

Desea utilizar el comando find , con la opción -iname para la coincidencia de nombres de archivos insensible a mayúsculas y minúsculas o la opción -name para coincidencias de nombres de archivos con mayúsculas y minúsculas. Ambos le permitirán usar nombres comodín. Entonces, para encontrar cualquier nombre de archivo que contenga "bat", debería usar:

find / -iname '*bat*'

O

find / -name '*bat*'

El * significa "cualquier carácter (s)", por lo que la búsqueda busca bat con cualquier carácter, incluido ninguno, antes o después de él. El / busca desde el directorio raíz recursivamente, puede usar . que buscará recursivamente desde el directorio actual, o la ruta absoluta desde donde desea buscar. Eche un vistazo a cómo buscar archivos usando regex en Linux script de shell

    
respondido por el AJefferiss 08.05.2015 - 12:46
2

Usa el viejo y viejo find .

find <path_for_search> -type f -iname "*bat*" 

por ejemplo:

% find . -type f -iname "*bat*" 
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c

de man find :

-type c
          File is of type c:
          [..]
          d      directory
          [..]
          f      regular file
          [..]

-iname pattern 
          Like -name, but the match is case insensitive.
    
respondido por el A.B. 08.05.2015 - 13:09

Lea otras preguntas en las etiquetas