En Linux a veces es necesario buscar un archivo o buscar un directorio y nos preguntamos ¿Cómo buscar en Linux?, existe una variedad de comandos y uno de ellos es el comando Find el cual usaremos para buscar carpetas y archivos mediante la terminal o consola de comandos.
En Linux para buscar un archivo o carpeta se utiliza el comando Find, lo cual iniciara una búsqueda recursiva en un directorio en específico o en todo el sistema siguiendo ciertos parámetros. El comando Find en Linux es una herramienta imprescindible para la búsqueda de archivos y directorios y es compatible con la mayoría de distribuciones Linux.
El comando Find en Linux es robusto y flexible, ya que permite el uso de argumentos y opciones para filtrar las búsquedas ya sea por fecha, tamaño, tipo, nombre, extensión, permisos, etc. Al ser un comando robusto puede ser difícil de aprender o recordar, es por ello que en GuiaLinux te traemos una guía y una serie de ejemplos prácticos del comando Find.
¿Como usar el comando Find en Linux?
Primeramente, debemos conocer la estructura del comando Find de Linux la cual es:
find <directory_path> <search_parameter> <search>
Ejemplo coloquial:
find <directorio donde buscar> <parametros> <busqueda>
Como se puede observar, debemos escribir el comando Find seguido de la ruta o directorio donde se va a buscar el archivo o carpeta en Linux, seguidamente deberemos incluir el parámetro de búsqueda y el nombre del archivo o carpeta que deseamos buscar. Debemos recordar que todos estos comandos deben ejecutarse en la consola o terminal de Linux.
A continuación, te mostraremos una tabla con los parámetros de búsqueda más usados.
[su_spoiler open=»no» title=»Parametros de Busqueda y Explicación» style=»fancy» icon=»plus-circle»]
Parametro de busqueda | Uso y Explicación |
---|---|
-name | Filtrar por nombre de archivo exacto (distingue entre mayusculas y minusculas) |
-iname | Filtrar por nombre de archivo (no distingue entre mayusculas y minusculas) |
-type | Filtrar por tipo de archivo |
-size, -empty | Filtrar por tamaño de archivo |
-ctime, -mtime, -atime | Filtrar por marca de tiempo |
-user, -group | Filtrar por propietario y grupo |
-perm | Filtrar por derechos de archivo |
[/su_spoiler]
Por otra parte, se pueden combinar dichos parámetros de búsqueda con operaciones lógicas «and, or, not», para de esta manera hacer una búsqueda más precisa en Linux. A continuación, te mostraremos una tabla con los operadores lógicos que pueden usarse para combinar los parámetros de búsqueda.
[su_spoiler open=»no» title=»Operadores Logicos y Explicación» style=»fancy» icon=»plus-circle»]
operadores lógicos | Explicación |
---|---|
-and | La búsqueda deben cumplir ambas condiciones |
-or | La búsqueda deben cumplir al menos una de las dos condiciones |
-not | Niega la condición posterior |
[/su_spoiler]
A continuación, te mostraremos como buscar un archivo o directorio en Linux con el comando Find.
¿Como Buscar en el directorio actual?
Con el comando Find podemos especificar en que directorio se debe buscar, usando la opción "."
Como directorio de búsqueda.
find . <search_parameter>
Ejemplo práctico para hacer búsquedas con Find en el directorio actual (en este caso ~/Documentos/GuiaLinux
) buscaremos un archivo llamado TXTBuscado.txt
find . TXTBuscado.txt
#Resultado:
./TXTBuscado.txt #Aqui muestra el directorio y el archivo encontrado
TXTBuscado.txt #Aqui muestra el archivo encontrado
#En caso de no encontrarlo mostrara el siguiente mensaje
find: ‘TXTBuscado2.txt’: No existe el archivo o el directorio
¿Como Buscar en tu carpeta de usuario u Home?
Con el comando Find podemos buscar en la carpeta de usuario usando la opción "~"
Como directorio de búsqueda.
find ~ <search_parameter>
#Ejemplo Practico
find ~ TXTBuscado.txt
No obstante, hay que tener en cuenta que esto solo buscara dentro de la carpeta de usuario, para buscar en las sub carpetas o subdirectorios debemos usar los parámetros de búsqueda '-name'
y '-iname'
. Por otra parte, si no conoces el nombre exacto del archivo o directorio no te preocupes, puedes utilizar la opción o comodín '*'
de esta manera buscara con Find todos los archivos o directorios que contengan la palabra o extensión buscada.
find ~ <search_parameter*> o <*search_parameter*>
#Ejemplo Practico
find ~ -iname TXTBuscado* # Esto encotrara todos los archivos o carpetas con la palabra TXTBuscado
¿Como buscar en todo el sistema con el comando Find en Linux?
Para buscar una carpeta o archivo con Find en todo el sistema de Linux podemos usar la opción o comodín '/'
seguido de la búsqueda. No obstante, debemos tener en cuenta que debido a la gran cantidad de directorios y subdirectorios existentes esto puede requerir mucho tiempo.
find / <search_parameter>
#Ejemplo Practico
find / -iname Nombre_del_archivo
[su_box title=»Advertencia!» style=»default» box_color=»#F73F43″ title_color=»#FFFFFF» radius=»0″]
Hay que tener especial cuidado al usar el Linux Find en todo el sistema con el parámetro '-exec'
, ya que esto podría dañar tu sistema operativo
[/su_box]
¿Como personalizar los resultados de la búsqueda en Linux con el comando Find?
Al usar el comando de Linux Find los resultados pueden ser muy extensos, para solucionar esto usaremos las utilidades u opciones de la línea de comandos los cuales serán de gran utilidad para ordenar los resultados mostrados en la Terminal al usar el comando Find.
Para mostrar los resultados página a página usaremos el parámetro 'less'
:
find <directory_path> <search_parameter> | less
# Ejemplo Practico
find ~ -iname Nombre_del_archivo | less
Para conocer el número de resultados, usaremos el comando 'wc'
Seguido del parámetro '-l'
:
find <directory_path> <search_parameter> | wc -l
# Ejemplo Practico
find ~ -iname Nombre_del_archivo | wc -l
En caso de que solo queramos ver los primeros o los últimos resultados de la búsqueda debemos usar los comandos 'head'
y 'tail'
seguido del parámetro '-n'
y el número de resultados deseados.
find <directory_path> <search_parameter> | head -n <amount>
find <directory_path> <search_parameter> | tail -n <amount>
# Ejemplo Practico, muestra los primeros 3 resultados de la busqueda
find ~ -iname Nombre_del_archivo | head -n 3
Ejemplos prácticos del uso del comando Find para buscar directorios o archivos en Linux
Con el comando Find en Linux podemos filtrar las búsquedas por nombre exacto distinguiendo mayúsculas y minúsculas:
find ~ -name Nombre_del_archivo
# Ejemplo
find ~ -name ejemplo.txt
Buscar en Linux con Find sin distinguir entre mayúsculas y minúsculas con el comando '-iname'
que indica 'insensible'
de 'case-insensitive'
:
find ~ -iname Nombre_del_archivo
# Ejemplo
find ~ -iname ejemplo.txt
En la práctica es mejor usar el comando '-iname'
, pero si este llegar a arrojar demasiados resultados podemos usar '-name'
para filtrar por nombre exacto.
En caso de querer buscar con el comando Find una extensión en específico o archivos y directorios con una palabra en específico podemos usar el comodín '*'
de la siguiente manera:
find . -iname 'git*'
¿Como filtrar las búsquedas con el comando Find en Linux?
En Linux los archivos, carpetas o directorios tienen propiedades entre ellas podemos encontrar:
- El nombre.
- Tipo de archivo.
- Extensión.
- Marca de Tiempo.
- Tamaño.
- Propietario.
- Derechos de acceso.
Dichas propiedades las podemos filtrar con el comando Find aplicando ciertos parámetros. A continuación te mostraremos los filtros de búsqueda más usados:
¿Como buscar por tipo de archivo con el comando Find en Linux?
En Linux todo es considerado un archivo, por lo tanto, un archivo de Word, una carpeta o directorio todo es considerado un archivo en Linux.
Es por ello que el comando Find nos brinda el parámetro de búsqueda 'type'
con el cual podremos distinguir entre archivos, directorios y enlaces cuando hacemos una búsqueda. A continuación te presentamos una tabla con los tipos de archivo más usados:
Tipo de Archivo | Explicación |
---|---|
f | Archivo |
d | Directorio |
l | Enlace |
Para filtrar los resultados de la búsqueda y mostrar únicamente los archivos usaremos el parámetro '-type'
seguido del tipo de archivo en este caso 'f'
:
find ~ -iname ejemplo.txt -type f
Para filtrar los resultados de búsqueda y mostrar solo los directorios usamos el parámetro '-type'
seguido del tipo de archivo en este caso 'd'
para mostrar solo los directorios en los resultados de la búsqueda:
find ~ -name Documentos -type d # Busca el directorio Documentos en la carpeta de usuario
Por otra parte, si deseamos buscar archivos con una extensión de archivo determinada debemos usar el parámetro '-iname'
con el comodín asterisco '*'
:
# Buscamos todos los archivos con extensión .gif que se encuentren en la carpeta de usuario
find ~ -iname *.gif* -type f
En caso de que necesitemos buscar varios tipos de extensión podemos usar los operadores lógicos en el siguiente caso buscaremos con Find todos los tipos de archivo con extensión .gif y .jpg:
find ~ -iname *.gif* -or -iname *.jpg* -type f
También podemos usar el comando Find de Linux para buscar y eliminar un archivo de la siguiente forma:
find ~ -name "ejemplo.txt" -delete
Comando Find: Buscar por marca de tiempo
Linux crea propiedades de tiempo para los archivos, carpetas o directorios entre ellas podemos encontrar las de marca de tiempo la cuales son:
- Creación.
- Última modificación.
- Último acceso a un archivo.
Usando el comando Find en Linux podemos filtrar y encontrar las marcas de tiempo en las búsquedas para ello utilizaremos ciertos parámetros de búsqueda, los cuales presentaremos a continuación:
Parámetro de búsqueda | Explicación |
---|---|
-ctime, -cmin | Filtrar por fecha de creación |
-mtime, -mmin | Filtrar por fecha de modificación |
-atime, -amin | Filtrar por fecha de acceso |
- -ctime: Busca archivos cambiados hace
n
días. - -mtime: Busca archivos modificados hace
n
días. - -atime: Buscar archivos por el último acceso hace n Días
- Los parámetros cmin, mmin, amin hacen las mismas funciones pero en minutos
A continuación te mostraremos ejemplos básicos de como usar el comando Find para buscar por marca de tiempo:
Buscar archivos que se cambiaron hace menos 4 días en la carpeta GuiaLinux:
find ~/Documentos/GuiaLinux -ctime -4
Buscar archivos que se modificaron hace menos 60 minutos en la carpeta GuiaLinux:
find ~/Documentos/GuiaLinux -mmin -60
Buscar archivos a los que se accedió hace menos de 3 días en la carpeta GuiaLinux:
find ~/Documentos/GuiaLinux -atime +3
También podemos especificar un rango de días usando los modificadores '+'
y '-'
de la siguiente manera:
Modificador | Explicación |
---|---|
+ | La fecha es de hace más días que la especificada |
– | La fecha es de hace menos días que la especificada |
Si deseamos encontrar archivos creados hace más de 60 días usaremos el parámetro -ctime
anidándole el valor numérico '100'
anteponiendo el modificador +:
find . -type f -ctime +100
Con el comando Find podemos cubrir rangos específicos en este caso buscaremos archivos que se accedieron entre 10 y 20 días:
find . -type f -atime +10 -and -atime -20
Por otra parte, si deseamos buscar archivos que se modificaron o crearon hace menos de 10 min entonces usaremos -mmin
:
find . -type f -mmin -10
Comando Find: Buscar por tamaño de archivo
Con el comando find podemos filtrar la búsqueda por el tamaño del archivo utilizando el parámetro ‘-size'
y a continuación un valor numérico que especificara el tamaño deseado.
En el siguiente ejemplo buscaremos archivos con un tamaño mayor a 1 GB:
find . -size +1G
[su_box title=»Nota!» style=»default» box_color=»#F73F43″ title_color=»#FFFFFF» radius=»0″]El filtrado de tamaño solo funciona con los archivos. Linux no almacena el tamaño para los directorios en el sistema de datos.[/su_box]
A continuación mostraremos una tabla con las unidades disponibles para su uso con el comando find en Linux:
Unidad | Explicación |
---|---|
c | Bytes |
k | Kilobytes |
M | Megabytes |
G | Gigabytes |
b | 512-byte bloques |
También podemos especificar un rango de tamaño usando los modificadores '+'
y '-'
de la siguiente manera:
Modificador | Explicación |
---|---|
+ | El tamaño del archivo es mayor que el indicado |
– | El tamaño del archivo es menor que el indicado |
Si deseamos buscar archivos que tengan un tamaño menor a 200 MB lo haremos de la siguiente manera:
find ~ -size -200M
Si queremos especificar un rango de tamaños lo podemos hacer con las operaciones lógicas por ejemplo buscar los archivos que tenga un tamaño entre los 200 y 900 Megabytes:
find . -size +200M -and -size -900M
Por otra parte, si queremos buscar archivos vacíos con el comando Find utilizaremos el parámetro '-empty'
de la siguiente forma:
find . -type f -empty
También se pueden buscar directorios vacíos con el comando Find utilizando el tipo de archivo 'd'
:
find . -type d -empty
Comando Find: Buscar por propietario, grupo o derechos de acceso
En Linux cada archivo tiene permisos específicos asignados, un usuario propietario y un grupo. Debido a esto podemos usar el comando Find en Linux para filtrar las búsquedas de los archivos según su propietario, grupo o permisos. A continuación se mostrará una tabla con los parámetros de búsqueda más utilizados:
Parametro | Explicación |
---|---|
-user | Filtra la busqueda por propietario |
-group | Filtra la busqueda por Grupo |
-perm | Filtra la busqueda por permisos o derechos de acceso |
Buscar con Find archivos de un usuario: para ello utilizáremos el parámetro '-user'
seguido del nombre del usuario (en este caso GuiaLinux):
find . -user GuiaLinux
En caso de que deseemos buscar los archivos de nuestro propio usuario o el usuario conectado actualmente utilizaremos el parámetro '-user-'
y la expresión '$(whoami)'
, dicha expresión tomara el nombre del usuario actual:
find . -user $(whoami)
Buscar con Find archivos de un grupo: para ello utilizáremos el parámetro '-group'
seguido del nombre del grupo (en este caso GuiaLinux):
find ~ -group GuiaLinux
Buscar con Find archivos según los permisos o derechos de acceso: para ello usaremos los números octales que definen los permisos para el propietario, grupo y otros. Todo esto está explicado de una manera más detallada en nuestra guía de Como asignar permisos a directorios y archivos en Linux.
Si deseamos buscar archivos que son accesibles para todos los usuarios debemos usar el parámetro ‘-perm’ seguido del número octal ‘777’:
find . -perm 777
Si deseamos buscar los archivos los cuales solo el propietario actual tiene acceso usaremos el parámetro de búsqueda ‘-perm’ seguido del número octal ‘700’:
find . -perm 700
El comando find nos da la opción de buscar y encontrar archivos que tengan al menos uno de los permisos que se le especifica, para realizar esto debemos colocar el parámetro ‘-perm’ seguido del número octal con el signo menos (-):
find. -perm -007
Limitar la recursividad del comando find en Linux
Generalmente, el comando find en Linux recorrerá todos los directorios y subdirectorios. No obstante, es recomendable limitar la profundidad de la recursividad, es por ello que existen dos parámetros de búsqueda que nos ayudaran a limitar dicha recursividad los cuales son '-maxdepth'
y ‘-mindepth'
:
Parametro | Explicación |
---|---|
-maxdepth | Recursividad maxima |
-mindepth | Recursividad minima |
A continuación, se mostrarán algunos ejemplos prácticos del comando find limitando la profundidad de la recursividad.
Si deseamos encontrar archivos que tengan un tamaño de más de 1 Gigabyte y que solo busque en los directorios que no estén a más de 3 niveles de profundidad del directorio actual, usaremos el siguiente comando:
find . -type f -maxdepth 3 -size +1G
Si deseamos encontrar archivos que tengan un tamaño de más de 1 Gigabyte y que solo busque en los directorios que estén a 3 niveles y no más de 6 niveles de profundidad del directorio actual, usaremos el siguiente comando:
find . -type f -mindepth 3 -and -maxdepth 6 -size +1GB
Comando Find: Encontrar y procesar archivos en Linux
Es algo muy común que se requiera procesar una gran cantidad de archivos ya sea para modificar sus permisos, repararlos o eliminarlo y en estos casos podremos usar el comando Find para realizar dicha tarea.
A continuación, se mostrará de forma general como usar el comando find y el patrón que se debe usar para ejecutar un comando para cada archivo que se encuentre. No obstante, hay que aclarar que todo comando de este tipo deberá terminar siempre con el texto {} \;
:
find <directory_path> <find_parameter> -exec <command_and_parameter> {} \;
[su_box title=»Nota!» style=»default» box_color=»#F73F43″ title_color=»#FFFFFF» radius=»0″]Debido a que dicho comando se ejecuta sin preguntar, dependiendo de los parámetros y comandos usados con el comando find y el parámetro ‘-exec’ este puede dañar su sistema operativo si no se usa correctamente[/su_box]
Para evitar y limitar esto, existe un parámetro en Linux que es parecido al parámetro ‘-exec’ el cual es el ‘-ok’. Que hace que el comando en ejecución pida una confirmación al momento para cada archivo individual encontrando y se usa de la siguiente manera:
find <directory_path> <search_parameter> -ok <command_and_parameter> {} \;
Comando Find: Encontrar y modificar los usuarios y grupos en Linux
Si deseamos establecer la propiedad y grupo a uno o todos los archivos y directorios de una ruta en específico usaremos el comando find con el parámetro chown en este caso estableceremos todos los archivos y directorios contenidos en el directorio llamado Carpeta1 a ‘www-data’ de la siguiente manera:
find ~/Documentos/Carpeta1 -maxdepth 1 -exec chown www-data:www-data {} \;
Comando Find: Encontrar y ajustar los permisos de archivos en Linux
En Linux podemos buscar y cambiar los permisos de un archivo o directorio con el comando Find utilizando el comando chmod. Un ejemplo práctico general sería cambiar los permisos 777 a 664 y lo hacemos de la siguiente manera:
find ~ -type f -maxdepth 1 -perm 777 -exec chmod 664 {} \;
En caso de querer hacerlo con los directorios usaremos el siguiente comando:
find . -type d -maxdepth 1 -exec chmod 755 {} \;
Comando Find: Buscar y encontrar archivos y directorios vacíos en Linux
Si deseamos buscar y borrar directorios vacíos con el comando Find usaremos el comando rmdir de la siguiente manera:
find . -type d -maxdepth 1 -empty -ok rmdir {} \;
Por otra parte, si deseamos eliminar todos los archivos vacíos en Linux usaremos el siguiente comando:
find . -type f -maxdepth 1 -empty -ok rm {} \;
Comando Find: Buscar texto dentro de los archivos en Linux
Para buscar un texto dentro de un archivo con el comando Find usaremos el comando grep seguido del texto a buscar de la siguiente manera:
find ~ -type f -name "*.txt" -exec grep 'texto-a-buscar' {} \;
Comando Find: Buscar archivos ocultos en Linux
En ciertos casos necesitaremos buscar archivos ocultos en el sistema en este caso buscaremos los archivos ocultos en la carpeta de usuario que son aquellos que comienzan por un punto, para ello utilizaremos el siguiente comando:
find $HOME -type f -name ".*"
Con esto hemos concluido con la guía completa para el uso del comando Find en Linux