-
Notifications
You must be signed in to change notification settings - Fork 0
02 El Comando find
El comando find es un comando que busca recursivamente archivos que coincidan con cierto criterio de búsqueda (e.g., nombre del archivo, tipo de archivo, propietario, tamaño, etc.). Al encontrar archivos que cumplan con dicho criterio, por defecto imprime la ruta de dichos archivos. También puede realizar acciones sobre los archivos encontrados.
find [opciones] [directorio ...] {expresión} [acciones]
Note
Donde la expresión hace referencia a los criterios de búsqueda.
A continuación se encuentran algunas de las opciones más comunes para la expresión (criterios de búsqueda).
| Opción | Descripción | Ejemplo |
|---|---|---|
| -name patrón | El nombre del archivo coincide con el patrón especificado (sensible a mayúsculas). |
-name "*.log"-name "archivo.txt"
|
| -iname patrón | El nombre del archivo coincide con el patrón especificado ignorando mayúsculas (case insensitive). |
-iname "*.LOG"-iname "README*"
|
| -user usuario|UID | Coincide con el usuario o UID propietario del archivo. |
-user root-user 1000
|
| -group grupo|GID | Coincide con el grupo o GID del grupo propietario del archivo. |
-group sudo-group 1001
|
| -size n[cwbkMG] | Coincide con el tamaño especificado. El sufijo indica la unidad: c bytes, w palabras de 2 bytes, b bloques de 512 B, k KiB, M MiB, G GiB. Usar +n para mayor que y -n para menor que. |
-size +10M-size -1k
|
| -perm modo | Coincide con los permisos indicados en notación simbólica u octal. |
-perm 644-perm -u+x
|
| -type b|c|d|p|f|l|s|D | Coincide con el tipo de archivo: f archivo regular, d directorio, l enlace simbólico, b dispositivo de bloque, c dispositivo de caracteres, p tubería nombrada, s socket, D puerta (Solaris). |
-type f-type d
|
| -newer archivo | Coincide con archivos modificados más recientemente que el archivo de referencia. |
-newer /etc/passwd-newer referencia.txt
|
| -atime n | Coincide con archivos cuyo último acceso fue hace exactamente n días. Usar +n para más de n días y -n para menos. |
-atime -7-atime +30
|
| -mtime n | Coincide con archivos cuya última modificación del contenido fue hace n días. |
-mtime -1-mtime +90
|
| -ctime n | Coincide con archivos cuyo último cambio de metadatos (permisos, propietario, etc.) fue hace n días. |
-ctime -7-ctime +14
|
Puedes combinar expresiones usando operadores lógicos. Cuando más de una expresión es especificada, por defecto solo se encuentran los archivos que coincidan con todas las expresiones. Sin embargo, es posible utilizar operadores lógicos para personalizar aún más los criterios de búsqueda.
| Operador | Opción | Descripción | Sintaxis |
|---|---|---|---|
| AND | -a|-and | Evalúa que todas las expresiones se cumplan |
expresión1 expresión2 ... expresiónNexpresión1 -a expresión2 ... -a expresiónNexpresión1 -and expresión2 ... -and expresiónN
|
| OR | -o|-or | Evalúa secuencialmente (izquierda a derecha) cada expresión hasta que una se cumpla; las restantes no se evalúan |
expresión1 -o expresión2 -o expresiónNexpresión1 -or expresión2 ... -or expresiónN
|
| NOT | !|-not | Evalúa que la expresión sea falsa (negación) |
! expresión-not expresión
|
| UNION | , |
Evalúa cada una de las expresiones especificadas de forma independiente | expresión1, expresión2, ..., expresiónN |
Note
El operador ,, puede tener espacios cero o más espacios antes y después.
A continuación se encuentran algunas de las opciones más comunes para las acciones que se pueden realizar sobre los archivos encontrados.
| Opción | Descripción | Ejemplo |
|---|---|---|
| Muestra la ruta de los archivos encontrados (acción por defecto). | -print |
|
| -exec cmd {} ; | Ejecuta el comando especificado por cada archivo encontrado. {} se sustituye por la ruta del archivo. El comando termina con \; o +. |
-exec rm {} \;-exec chmod 644 {} +
|
| -ok cmd {} ; | Igual que -exec, pero solicita confirmación interactiva antes de ejecutar el comando en cada archivo. |
-ok rm {} \;-ok mv {} /tmp \;
|
| -delete | Elimina los archivos encontrados. Usar con precaución. | -delete |
| -fprint archivo | Almacena las rutas de los archivos encontrados en el archivo destino indicado. | -fprint resultados.txt |
El comando find tiene muchísimas opciones útiles y poderosas para encontrar
archivos específicos y realizar operaciones sobre ellos.
# Buscar todos los archivos con extensión .txt en el directorio actual
find . -name "*.txt"
# Buscar todos los directorios dentro de /home
find /home -type d
# Buscar archivos mayores a 100 MiB en /var
find /var -size +100M
# Buscar archivos pertenecientes al usuario "juan"
find / -user juan
# Buscar archivos modificados en los últimos 7 días en /etc
find /etc -mtime -7# Buscar archivos .log mayores a 50 MiB y eliminarlos
find /var/log -name "*.log" -size +50M -delete
# Buscar archivos .conf y copiarlos a /backup (con confirmación)
find /etc -name "*.conf" -ok cp {} /backup/ \;
# Buscar archivos con permisos 777 y corregirlos a 644
find / -type f -perm 777 -exec chmod 644 {} +
# Buscar archivos que NO pertenezcan al usuario root en /etc
find /etc -not -user root
# Buscar archivos .sh o .py en el directorio actual
find . -name "*.sh" -o -name "*.py"
# Buscar archivos vacíos en /tmp y listarlos
find /tmp -type f -empty -print
# Buscar archivos modificados más recientemente que /etc/passwd
find /home -newer /etc/passwdEs importante aprender el comando find, especialmente porque suele venir
preinstalado en sistemas operativos Unix y Unix-like (e.g., Linux). Sin embargo,
existen varias alternativas interesantes:
| Comando | Descripción | Preinstalado |
|---|---|---|
| locate | Busca archivos rápidamente a partir de una base de datos indexada que puede actualizarse con updatedb. No refleja cambios en tiempo real. |
Depende de la distribución (mlocate / plocate) |
| fd | Alternativa rápida, simple y amigable a find, escrita en Rust. Sintaxis intuitiva y salida con color por defecto. |
No |
-
Akamai (s.f.). find Command. Operating Systems Fundamentals. https://www.coursera.org/learn/akamai-operating-systems/lecture/nulrm/find-command
-
Akamai (s.f.). find Command Reference. Operating Systems Fundamentals. https://www.coursera.org/learn/akamai-operating-systems/supplement/QgFY8/find-command-reference
- Definición y Estructura de un Shell
- Los Diferentes Tipos de Shell
- Definición y Sintaxis de un Comando
- Variables, Alias y Funciones
- Comandos de Utilidad y Consulta
- Linux como Sistema Multiusuario
- Introducción a los Usuarios y Grupos
- Gestión de Usuarios
- Gestión de Grupos
- Gestión de Contraseñas
- Búsqueda de Información de Usuarios y Grupos con
getent
- Atributos de Archivos: Propiedad y Permisos de los Archivos
- Cambio de Propiedad y Permisos
umask: Permisos Predeterminados de Archivos- Cambio de Identidad y Privilegios
- Gestión de Paquetes (Package Management)
- Compresión y Archivado de Archivos
- Optimización y Conversion de Archivos