Aprende leyendo en orden

Encontrar archivos — find y comodines

Aprende a indicar muchos nombres de archivo a la vez con los comodines * ? [], y cómo find busca por nombre con -name y por tipo con -type — todo práctico en una terminal del navegador.

Comodines — * ? []

Los comodines son símbolos para indicar parte de un nombre de archivo de forma masiva.

* coincide con una secuencia de cero o más caracteres, ? coincide con exactamente un carácter y [] coincide con cualquiera de los caracteres dentro de los corchetes.

Combínalos con ls, como ls *.txt, para listar solo los nombres que coincidan.

Con qué coincide cada comodín
*.txtfile?.logdata[12].csvtodos losarchivos .txtun caráctertras filedata1.csv odata2.csv
* coincide con cualquier secuencia, ? con un carácter y [] con cualquiera de los caracteres dentro de los corchetes.
SímboloCon qué coincideEjemploArchivos que coinciden
*Una secuencia de cero o más caracteres*.txta.txt note.txt
?Exactamente un carácterlog?.txtlog1.txt (log10.txt no coincide)
[...]Cualquiera de los caracteres dentro de los corcheteslog[12].txtlog1.txt log2.txt
[a-c]Cualquier carácter del rangof[a-c].txtfa.txt fb.txt fc.txt
touch a.txt b.txt note.log         # crear archivos material
ls *.txt                           # a.txt b.txt
ls *.log                           # note.log
ls ?.txt                           # a.txt b.txt (un car. + .txt)

① Crea tres archivos con extensiones distintas usando touch a.txt b.txt note.log.

② Combina un comodín con ls para listar solo los archivos que terminan en .txt.

③ Luego lista solo los archivos que terminan en .log y confirma que puedes acotar por nombre. (Ejecútalo correctamente y aparecerá una explicación.)

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Un carácter o una elección — ? y []

? siempre coincide con exactamente un carácter, así que úsalo cuando quieras fijar el número de caracteres.

[] coincide con cualquiera de los caracteres escritos dentro de los corchetes, así que [12] es 1 o 2, y puedes escribir un rango como [a-c].

Acotan los objetivos de forma más precisa que *.

touch log1.txt log2.txt log9.txt logA.txt   # crear material
ls log?.txt                                  # los 4 con un car. final
ls log[12].txt                               # solo log1.txt log2.txt

① Crea cuatro archivos con nombres correlativos usando touch log1.txt log2.txt log9.txt logA.txt.

② Combina ls con ? para listar los archivos donde log va seguido de un carácter y termina en .txt.

③ Usa [] para acotar solo a log1.txt y log2.txt. Luego confirma que un rango como [1-2] acota a los mismos 2 archivos.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Buscar por condición — find -name / -type

find recorre de forma recursiva por debajo de un directorio de inicio y busca lo que cumpla una condición.

Con find inicio -name 'patrón' condicionas por el nombre, y con -type f (archivo) o -type d (directorio) condicionas por el tipo.

Úsalo para encontrar archivos por nombre cuando están enterrados en lo profundo de la jerarquía.

CondiciónSignificadoEjemplo
-name 'patrón'El nombre coincide con el patrónfind . -name '*.log'
-type fSolo archivos normalesfind . -type f
-type dSolo directoriosfind . -type d
Condiciones de find y con qué coinciden
find . -name '*.txt'find . -type ffind . -type delementosllamados .txtsolo archivossolo directorios
-name filtra por patrón de nombre, -type f por archivo y -type d por directorio.
mkdir -p tree/sub                  # crear el árbol material
touch tree/a.txt tree/sub/b.txt    # colocar archivos en la jerarquía
find tree -name '*.txt'            # buscar .txt bajo tree recursivamente
find tree -type d                  # solo directorios bajo tree

Pon entre comillas el patrón de find

Envuelve el '*.txt' de find . -name '*.txt' en comillas simples.

Sin comillas, la shell expande * primero, lo que puede apuntar a algo distinto de lo que pretendías.

La regla básica es poner entre comillas el patrón de -name y pasárselo al propio find.

① Crea un directorio de dos niveles con mkdir -p tree/sub.

② Coloca archivos tanto en el padre como en el subdirectorio con touch tree/a.txt tree/sub/b.txt.

③ Pasa tree a find como punto de inicio y busca de forma recursiva los archivos .txt por la condición de nombre.

④ Luego lista solo archivos por la condición de tipo (find tree -type f), lista también solo directorios y compara los tres resultados.

Linux console
0 / 5 completado(s)
Loading Linux Terminal...
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Con qué coincide el comodín *?

Pregunta 2¿Con qué archivos coincide ls log[12].txt?

Pregunta 3¿Qué se muestra al ejecutar find tree -type d?