Nota: Este artículo fue publicado originalmente en 2013. Algunos pasos, comandos o versiones de software pueden haber cambiado. Consulta la documentación actual de Man Pages para obtener la información más reciente.
En esta guía paso a paso, aprenderás a buscar un archivo en Ubuntu usando criterios complejos (o no).
Cómo buscar un archivo en Ubuntu usando criterios complejos (o no)
A veces necesitas encontrar un archivo y todo lo que sabes es la extensión o el comienzo del nombre del archivo. Una búsqueda potente y flexible para buscar en todos los subdirectorios archivos que coincidan con un criterio es importante. Ubuntu viene con un comando que te permitirá buscar un nombre de archivo exacto o usar un comodín para especificar un criterio. Solo cubriremos lo básico, pero ten en cuenta que el comando find tiene más opciones para especificar criterios más concretos si lo deseas.
Los usuarios de Windows encontrarán que el comando find es el más parecido al comando dir (que sigo intentando usar aunque no estoy ejecutando un Windows Server aquí… jaja).
Esta es la sintaxis: find
find / -type f -iname "MiArchivo.Ext" se usa cuando sabes el nombre exacto. Reemplaza MiArchivo.Ext con tu nombre de archivo.
find / -type f -iname "MiArchi*" si quieres coincidir con más archivos usando un carácter comodín.
Evita la opción -type si quieres buscar directorios, etc.
Aquí hay algunos ejemplos para ayudarte a usar find en algunos escenarios comunes:
Escenarios básicos:
I. Encontrar todos los archivos Zip en un directorio
find /home -name '*.zip'
II. Encontrar todos los archivos MP3 y AAC en un directorio
find /home/MyMusic -name '*.mp3' -o -name '*.aac'
III. Encontrar todos los archivos MP3 y AAC en un directorio usando búsqueda sin distinción de mayúsculas
find /home/MyMusic -iname '*.Mp3' -o -iname '*.aAc'
Escenarios con criterios combinados:
IV. Encontrar todas las películas que ocupan más de 500 mb de espacio
find /home/ -iname '*.avi' -o -iname '*.mpeg' -a -size +500M
V. Encontrar todos los respaldos grandes hechos en las últimas 2 semanas
find /home/ -iname '*.zip' -o -iname '*.bak' -a -size +300M -mtime -14
Canalizar la salida para tomar una acción sobre el conjunto de resultados
En los siguientes ejemplos ten en cuenta lo siguiente:
- ’{}’ coincide con el archivo que fue encontrado
- ’ ;’ termina la sentencia exec. Nota que hay un espacio antes del guión.
VI. Encontrar todos los directorios y establecer sus permisos a 755
find /usr/share/MyWPSite/ -type d -exec chmod 755 {} \;
VII. Encontrar todos los archivos y establecer sus permisos a 644
find /usr/share/MyWPSite/ -type f -exec chmod 644 {} \;
VIII. Encontrar todos los archivos de respaldo grandes (mayores a 300 Mb en este caso) con más de 14 días de antigüedad y moverlos a una nueva carpeta
find /home/ -iname '*.zip' -o -iname '*.bak' -a -size +300M -mtime +14 -exec mv '{}' /my/archive/backups/ \;
Aquí tienes una copia de la página man para find:
FIND(1) FIND(1)
NOMBRE
find - buscar archivos en una jerarquía de directorios
SINOPSIS
find
DESCRIPCIÓN
Esta página del manual documenta la versión GNU de find. GNU find busca
el árbol de directorios enraizado en cada nombre de archivo dado evaluando la
expresión dada de izquierda a derecha, de acuerdo con las reglas de prece-
dencia (ver sección OPERADORES), hasta que el resultado es conocido (el lado
izquierdo es falso para operaciones and, verdadero para or), en cuyo punto
find pasa al siguiente nombre de archivo.
Si estás usando find en un entorno donde la seguridad es importante
(por ejemplo si lo estás usando para buscar directorios que son escribibles
por otros usuarios), deberías leer el capítulo "Consideraciones de Seguridad"
de la documentación de findutils, que se llama Finding Files y viene
con findutils. Ese documento también incluye mucho más detalle y
discusión que esta página del manual, así que puede resultarte una fuente
de información más útil.
OPCIONES
Las opciones '-H', '-L' y '-P' controlan el tratamiento de enlaces
simbólicos. Los argumentos de línea de comandos que siguen a estos se toman como nombres de
archivos o directorios a examinar, hasta el primer argumento que
comienza con '-', '(', ')', ',', o '!'. Ese argumento y cualquier argumento
siguiente se toman como la expresión que describe qué se debe
buscar. Si no se dan rutas, se usa el directorio actual.
Si no se da expresión, se usa la expresión '-print' (pero
probablemente deberías considerar usar '-print0' en su lugar, de todas formas).
Resumen
Has aprendido exitosamente a buscar un archivo en Ubuntu usando criterios complejos (o no). Si encuentras algún problema, verifica los prerrequisitos y asegúrate de que tu entorno de Man Pages esté correctamente configurado.