Busque todos los archivos con una extensión .sql en carpetas y subcarpetas

17

Quiero buscar todos los archivos con la extensión .sql en carpetas y subcarpetas (recursivas).

¿Cómo puedo hacer esto?

Blankman
fuente

Respuestas:

29

O...

find $directory_name -name \*.sql

Por ejemplo

find / -name \*.sql

O

find ~ \*.sql

(donde ~ equivale a / home / your_username /), o ...

find /usr/local/share/ \*.sql

Etcétera.


fuente
2

Ejecute esto en la línea de comando:

cd / && find | grep '\.sql$'

Cambie '/' al directorio que desea buscar.

El findcomando puede realizar la tarea sin grep (usando opciones adicionales), pero el uso anterior me parece más conveniente.

En orden, el comando anterior:

  1. Cambia el directorio actual al directorio raíz ( cd /)
  2. Enumera todos los archivos y directorios en y debajo del directorio actual ( find)
  3. Filtra los archivos y directorios para cualquier cosa que termine con '.sql' ( | grep '\.sql$')
Barbarrosa
fuente
gracias, puedes explicarlo? estás usando grep y pasando su salida para encontrar?
Blankman
Viceversa, en realidad. Estoy usando find y pasando su salida a grep. Agregué una explicación más detallada arriba.
Barbarrosa
¿funcionaría esto también en una Mac? Intenté 'encontrar | grep '\ .sql $' y generó la información de ayuda de uso.
Blankman
find es una herramienta poderosa y realmente no necesita canalizar la salida a grep. Este es un buen enlace: content.hccfl.edu/pollock/unix/findcmd.htm
Panther
1
findya tiene capacidades de filtro
enzotib
1

Sé que esta es una publicación anterior, pero soy bastante nuevo en esto y he encontrado una manera fácil de encontrar todos los archivos de cierta extensión en un directorio y sus subdirectorios secundarios. Bueno, primero navegas hacia el y parent Directoryluego find . -name '*.sql'encontrarás todos los archivos con extensión .sql en los directorios y sus subdirectorios.

En mi caso, quería eliminar todos los archivos .xml en el directorio y sus subdirectorios, así que lo que hice más es que agregué eliminar como aquífind . -name '*.xml' | xargs rm

Espero que esto ayude a alguien :)

M090009
fuente
2
findentiende el -deletecomando. No hay necesidad de involucrarse rm. O puede usar el -execcomando para invocarlo directamente sin el desvío a través de una tubería y xargs.
David Foerster
0
locate -br \\.sql$ | egrep '^/folder/path/'

Si no está instalado, instálelo previamente con:

sudo apt install mlocate
Vzzarr
fuente
Esto requiere una mlocate.dbinstancia actualizada que no esté configurada fuera de la caja en Ubuntu (Blieve). Además, ¿por qué no simplemente locate '/folder/path/*.sql'?
David Foerster
@DavidFoersterI Lo intenté como lo especificó, pero no funciona, supongo que regex in locatetiene una configuración diferente de la expresión regular utilizadaegrep
Vzzarr
locatecoincide con expresiones globales como /folder/path/*.sql, no expresiones regulares.
David Foerster
Lo sentimos, pero a partir de man locaterecibo -r, --regexp REGEXP - Search for a basic regexp REGEXPpor lo que supuse que era una expresión regular. De todos modos probé tu "expresión global" pero no funciona, lo siento
Vzzarr
Lea al menos las primeras oraciones de la descripción antes de comenzar a seleccionar la opción de la sinposis: "Si --regexno se especifica, los PATTERNs pueden contener caracteres globulares". ( Fuente )
David Foerster