A veces necesitas localizar varios archivos del mismo tipo que ocupan espacio innecesario en tu disco duro.
Por ejemplo, algunos programas que funcionan desde la consola, como npm, guardan sus errores en archivos de extensión “.log” y si no estás pendiente de eliminarlos se van acumulando en tu disco duro.
¿Cuáles son los comandos de búsqueda en la terminal?
Para encontrar archivos de forma efectiva, usa el comando find, el cual buscará en la ruta que le indiques el tipo de archivos que necesitas. Su sintaxis es:
find [rutaDesdeDondeEmpezarBuscar][opciones]
Segmentar por el nombre (-name)
Veamos un ejemplo, voy a buscar en mi carpeta home todos los archivos que tenga una extensión “.png”.
find ./ -name *.png
El punto indica que debe empezar desde la carpeta en la que está y la opción -name es para especificar el nombre que debe buscar.
Segmentar por el tipo (-type)
También puedes segmentar por el tipo, si es un archivo o si es un directorio utilizando la opción -type, el cual acepta f para archivos, d para directorios y l para enlaces simbólicos.
Si quieres usar más de una opción lo separas por comas.
find ./ -typef -name "f*"
Esto me muestra todos los archivos que comiencen con la letra “f”.
Veamos un ejemplo buscando archivos y directorios.
find ./ -typef,d -name "D*"
Segmentar por tamaño (-size)
Con la opción -size podemos segmentar por tamaño ingresando el peso que queremos buscar. Esta opción tiene un uso un tanto especial. Primero que todo hay que colocar la unidad de peso c para byte, k para Kilobyte, M para Megabyte y G para Gygabyte.
Entonces, si escribes en la terminal:
find ./ -size4k
Buscará los archivos que pesen exactamente 4kb. Pero claro, atinar el peso exacto de un archivo no es para nada sencillo, así que podemos especificar que sea ese peso en adelante con el símbolo + o de ese peso para abajo con el símbolo -.
find ./ -size +4k
Busca los archivos que pesen 4kb o más.
find ./ -size-4k
Busca los archivos que pesen 4kb o menos.
Buscar vacíos (-empty)
Para buscar los archivos vacíos usamos la opción empty que es fácil de usar, no tienes que especificarle nada, solo escribirla.
Por ejemplo, si quisiera buscar todas las carpetas vacías, habría que escribir:
find ./ -type d -empty
Limitar la búsqueda (-maxdepth -mindepth)
Puede que no queramos buscar en absolutamente todas las carpetas del sistema, sino que queremos únicamente un pedacito. Para eso limitamos la profundidad de carpetas a la que el comando debe buscar, esto se hace con la opción -maxdepth seguido de la profundidad.
find ./ -type d -maxdepth 2
Continuando, a veces ya conocemos más o menos la estructura de nuestras carpetas, así que nos queremos saltar niveles, por lo que le asignamos una profundidad mínima al comando.
find ./ -type d -mindepth 2
Una última cosa, es recomendable pasar el output al comando less, así:
find ./ | less
De esta forma podrás usar esa interfaz de less para buscar tus archivos.
Tabla de comandos de búsqueda
Opción
Función
-size
Busca por el peso
-mindepth
Asigna una profundidad mínima
-maxdepth
Asigna una profundidad máxima
-type
Busca por el tipo de archivo
-name
Busca por el nombre del archivo
Ejercicio de práctica
El hábito hace al monje y la terminal al buen programador.
Crea el comando find para cada uno de estos casos:
Busca tus archivos mayores a 100Mb, con una profundidad máxima de 4, que comiencen por la letra d.
Busca los archivos que tengan extensión “.pdf” con una profundidad mínima de 2.
Busca todas las carpetas que comiencen por la letra “A” con una profundidad máxima de 5, que estén vacías.
Busca todo lo que tenga una letra “j” que pese más de 1b. Luego guarda la salida en un archivo llamado “LosArchivosJ.txt” y cuando termine de hacer todo eso imprime un mensaje que diga “Comando terminado con éxito”.
Hay otro comando que no se vio en esta clase MUY interesante 👀.
.
Este es el comando whereis (en español: ¿dónde está?), este comando es algo similar a which, pero mucho mejor. Este comando localiza los ficheros binarios, fuentes y páginas del manual de un programa, es decir, podemos decir que hace algo así como una “búsqueda mucho más profunda”, me encanta porque puedes saberlo casi todo sobre la ubicación de un programa 😄.
.
Adicionalmente, find es uno de esos comandos que más amo con toda mi vida, ya puse un ejemplo usando find en una clase anterior, pero es que es un comando muy bueno! A modo de anécdota, una vez me pasaron un archivo… escondido entre un montón de carpetas, sí, una carpeta dentro de otra, dentro de otra, y al lado otras 10 carpetas más… ¿qué hice? usé el comando find 👀. Ventajas se saber usar la terminal, ¡y ahora tú también sabes usarla! 😄
-name: Realiza una búsqueda por nombre de archivo.
-iname: Realiza una búsqueda por nombre de archivo sin tomar en cuenta las mayúsculas o minúsculas.
-type: Realiza una búsqueda por tipo de archivo, f(files) y d(directories) que son los más comunes.
-size: Realiza una búsqueda por el tamaño de archivo y/o directorio.
Banderas de tiempo⏰
mmin: Búsqueda por tiempo en minutos.
mtime: Búsqueda por tiempo en días.
Más banderas👀
-maxdepth: Después de está bandera se pone el número de niveles de profundidad en los que queremos realizar la búsqueda
-empty: Realiza una búsqueda de archivos y/o directorios vacíos.
-perm: Búsqueda de archivos por permisos.
-not: Retorna los resultados que no coinciden con la búsqueda.
-delete: Está bandera se coloca al final del comando, eliminara los resultados de la busqueda(⚠️Hay que tener mucho cuidado al usarla).
Hay muchas más banderas, pero esas son las que me parecieron más útiles.
. Ejemplos:
A continuación pondré unos cuantos ejemplos de las banderas mencionadas anteriormente.
.
Búsqueda de todos los archivos con el permiso 644 a partir del directorio actual con una profundidad de 2 niveles.
find . -perm 644 -maxdepth 2
.
Búsqueda de archivos vacíos a partir del directorio actual.
find . -typef -empty
.
Búsqueda de todos los archivos .log, todos los resultados serán eliminados.
find . -type d -iname "*.log" -delete
.
Para este aporte use como referencia algunas clases y aportes del curso pasado, así como también conocimientos propios, dejo los link de referencia por si quieren verlo más a fondo(están en inglés): Link 1 Link 2
Espero que les sea de ayuda, 💚 si te ayudo.
Es una de las partes mas interesantes de la terminal, ya que nos permite buscar archivos de manera eficiente y específica 💫.
which <programa> Busca en todas las rutas del PATH para encontrar donde está alojado algún archivo binario 🔢.
find <ruta inicial> -name <archivo> Nos permite encontrar un archivo a partir de una ruta inicial, y dentro de todas las carpetas que surjan de ese inicio 🌲.
Algo muy cool es que podemos usar wildcards para hacer mas eficiente la búsqueda 🔍.
find <ruta inicial> -type <tipo> -name <nombre> podemos especificar el tipo de archivo, d → directorio, f → documento.
find <ruta inicial> -size <tamaño><unidad> podemos buscar tamaños mayores a un determinado tamaño, por ejemplo, de 20M (megas).
Solución al reto: find ./ -name *.txt -type f -size 1M > mis_archivos_texto.txt | echo "archivos guardadados exitosamente"
Para buscar en que carpeta tenemos más archivos pesados mediante una interfaz grafica desde la terminal, pueden instalar Ncdu, a mi me facilito mucho la administración de archivos:
(Recomiendo ponerle un alias, ya que el nombre ncdu para mi me es difícil de recordar)
url: https://dev.yorhel.nl/ncdu/man
 dependiendo su extensión, nombre, ubicación, etc.
.log
Son archivos de texto plano que recopilan normalmente la información de un archivo en ejecución.
Por ejemplo cuando Google Chrome se está ejecutando crea un archivo .log para ver las páginas que visitamos, si hay errores en el sistema, etc.
Estos archivos llegan a ser molestos y hay que borrarlos.
Buscar archivos .log en la terminal
$ find [punto de partida] -type f -name *.log
which
Nos ayuda buscar la ruta de nuestros binarios, lo busca en toda la ruta del path.
$ witch [comando o ejecutable]
find
Nos permite encontrar un archivo, lo primero que recibe es la ruta desde donde va a buscar el archivo.
El comando find es uno de los más versátiles que podemos encontrar en la terminal, a través de sus diferentes opciones podemos realizar diferentes tipos de búsquedas.
Tiene una opción especial que es exec una vez terminada la búsqueda, nos permite ejecutar un comando.
Funciona bien el shell bash tal como en la clase en zsy hay que colocarle '' a lo que tratamos de buscar.
En caso de que no funcione el comando tratemos de colocarle comillas simple a lo que se está buscando
$ find [punto de partida] [opcion] [archivo o directorio]
$ find [punto de partida] [opcion] '[archivo o directorio]'
-name: Va a buscar por nombre.
Ejemplo
$ find . -name file
Wildcards
$ find . -name *.txt
Pipes operator
$ find . -name *.txt | less
Operadores
-type: Busca por tipos y este tiene dos argumentos.
f: Solamente busca files o archivos.
d: Solamente busca directorios.
$ find [punto de partida] -type [argumentos de type] [opcion] [archivo o directorio]
#Ejemplo
$ find . -type d -name Platzi
Este ejemplo que acabamos de ver nos muestra los archivos que pertenezcan al usuario X, ubicados en cierto directorio con los permisos que le indiquemos.
Buscar solamente archivos
-type f: quiere decir que solo busque archivos.
-mtime Xtime: quiere decir cierta cosa que se halla modificado en un tiempo X.
$ find lugarDeBusqueda -type f -mtime tiempoEnDias
Comandos de búsqueda
Nos sirven para encontrar archivos y directorios, dependiendo su ext. Nombre, ubicación, etc.
which ‘archivo’ : nos busca los archivos binarios en la ruta de PATH
find ‘rutaInicialDeBusqueda’ -name ‘nombreDelArchivo’: nos permite encontrar un archivo según la ruta indicada y el nombre.
find ‘rutaInicialDeBusqueda’ -name *.’extencion’ : nos permite buscar los archivos según la extencion desde la ruta indicada, en este caso se usa wildcards
find ‘rutaInicialDeBusqueda’ -type ‘fd’ name’nombreDelArchivo’ : type nos permite segmentar por f (files) o d (directorios)
find ‘rutaInicialDeBusqueda’ -size ‘tamañoYUnidadDeMedida’: busqueda por tamaño del archivo
Encontrar la ruta de nuestros archivos binarios con “which”
$ which <mi binario>
$ which ping
/usr/bin/code
$ which code
/usr/bin/code
$ which vi
/usr/bin/vi
Encontrar un directorio con “find”
- Buscar todos los directorios que se llamen file:
$ find ./ -name file
- Buscar todos los archivos que se llamen file.txt:
$ find ./ -name file.txt
- Buscar todos los archivos con extensión .html:
$ find ./ -name *.html
Buscar solo directorios llamados “sandbox”
$ find ./ -type d -name sandbox
Buscar solo archivos llamados “data”
$ find ./ -type f -name data
$ find ./ -type f -name data.* # si tiene extensión
coloco esto porque veo que muchos entendieron mal el find (no queda muy claro en el video), por eso siempre hay qué hacer pruebas con cada comando y leer otros foros:
la definición de find está mala, find no comienza a buscar desde la ruta inicial, busca desde el directorio actual pero la dirección que devuelve está escrita desde la ruta inicial. la solución al reto que muchos han publicado solo funciona si la ubicación actual es el home
en mi github estoy guardando toda la información con las pruebas que he hecho para quienes quieran leerla, también están los enlaces de donde saqué alguna información. tienen qué tener cuidado porque en el tiempo que llevo en platzi he visto que a los cursos les falta mucha profundidad. si no buscan por cuenta propia van a quedar con conceptos malos y muy al aire. la única forma de entender como funciona cada comando es usandolo y haciendo pruebas. https://github.com/koyomi-san/terminal/blob/main/comandos.txt
Cuando el profesor menciona que buscara todos los archivos mayoras a 20 MB, en realidad esta buscando los archivos que pesan 20 Mb aprox, para los mayores a 20 MB seria
find . -type f -name '*.txt' | > myDocuments.txt && echo 'archivos guardados exitosamente' && bat myDocuments.txt
Busca todos los archivos y los exporta a mydocuments.txt y muestra un mensaje que los archivos fueron guardados exitosamente y los muestra con bat, que es como cat pero con alas.
Hay comandos que nos ayudan a encontrar archivos e incluso podemos filtrarlos dependiendo su extension, su nombre o ubicación.
wich cd
Este comando nos ayuda a encontrar la ubicación de nuestros binarios en las rutas que tengamos guardadas en el PATH.
find ./ -name file
Este comando lo que hace es primero buscar EN LA RUTA QUE SELECCIONEMOS por el nombre (-name) todos los archivos que se llamen “file”. Pero también podemos utilizar wildcards
find ./ -name *.txt
Otro modificador de Find es que podemos de buscarlos por el tipo de archivo donde tenemos 2 tipos de archivos, “f” & “d” files o directories
find ./ -type d -name Documents
En este comando vemos como busca en la carpeta home todos los directorios de tipo Documents.
Tambien podemos buscar por tamaño, si queremos buscar los mayores a 20MB podemos usar
Busca tus archivos mayores a 100Mb, con una profundidad máxima de 4, que comiencen por la letra d.
find /mnt/c/Users/kboss/ -maxdepth 4 -type f -size +100M -name 'd*'
find /mnt/c/Users/kboss/ -maxdepth 4 -type f -size +10M -name 'd*'
Lo busque con menos peso por que no encontraba nada 😅
Busca los archivos que tengan extensión “.pdf” con una profundidad mínima de 2.
find /mnt/c/Users/kboss/ -mindepth 2 -type f -name '*.pdf'
Busca todas las carpetas que comiencen por la letra “A” con una profundidad máxima de 5, que estén vacías.
find /mnt/c/Users/kboss/ -maxdepth 5 -type d -name 'A*' -empty
Busca todo lo que tenga una letra “j” que pese más de 1b. Luego guarda la salida en un archivo llamado “LosArchivosJ.txt” y cuando termine de hacer todo eso imprime un mensaje que diga “Comando terminado con éxito”.
Para los que usen bash ( parece raro porque es la misma shell que se usa en clase, pero me paso). Deben validar la busqueda con comillas. Si no, no les toma los parametros de busqueda.
A veces, dudas de ti mismo, y de repente te ponen un reto en platzi… Y lo superas, y te quedas como “¿yo hice eso?”… Me pasa mucho… y lo peor es que lo hago, y vuelve y me pasa XD
Por algun motivo, estando en ubuntu, cuando el profe le da a buscar por el nombre a todos los archivos .txt lo tuve que poner entre comillas y ahi si funciono, no se si les pasara lo mismo 🤔
find ./ -type f -name *.txt | tee output.txt && echo"text files saved successfully"
Encuentra todos los elementos de tipo “file” que terminen con “.txt”, luego pasa el output al siguiente comando que escribira este mismo en un archivos llamado “output.txt”, si y solo si la ejecucion del pipe line fue exitosa, entonces imprime un mensaje “text files saved successfuly”
.log es la extensión para un archivo generado de manera automática que contiene un registro de los eventos de cierto software. Ahora entiendo por qué cuando genero pdfs con el comando pdflatex se crean estos archivos en la carpeta.
Búsqueda por fecha
Si quieres buscar archivos en función de su fecha de acceso y las registros de fecha de modificación, Linux te ofrece las herramientas para hacerlo. Hay 3 registros de tiempo de los cuales Linux realiza seguimiento en los archivos:
Tiempo de acceso (-atime) – Fecha más reciente en que el archivo fue leído o escrito.
Tiempo de modificación (-mtime) – Fecha más reciente en que se modificó el archivo.
Hora de cambio (-ctime) – Fecha más reciente en que se actualizaron los metadatos del archivo.
Búsqueda por tamaño
Linux te brinda la opción de buscar archivos según sus tamaños. La sintaxis básica para buscar archivos por tamaño es:
$ find ./ -type f -name "*.log" | tee ./Documents/LOG/backup.log; echo "Archivos Guardados Exitosamente"
La ejecución consiste en tres instrucciones:
$ find ./ -type f -name “*.log”
tee ./Documents/LOG/Log.txt
echo “Archivos Guardados Exitosamente”
La primera instrucción pasa como parámetro a la 2da través de redirecion (stdinput / stdoutput).
La tercera instrucción espera la ejecución de la 2da por un operador de control “,” (asincronismo).
En donde *find .txt encontrara todos los .txt dentro del directorio > redirigira el output al archivo filesList.txt y && sera condicional AND para posteriormente ejecutar echo “recopilacion correcta” solo si el comando anterior no devuelve error
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.