find es un comando para filtrar recursivamente objetos en el sistema de archivos basado en un simple mecanismo condicional. Utilice find para buscar un archivo o directorio en su sistema de archivos. Usando la bandera -exec, los archivos pueden ser encontrados y procesados inmediatamente dentro del mismo comando.

- Buscar archivos de Linux por nombre o extensión
- Comandos y sintaxis de búsqueda comunes de Linux
- Buscar un archivo en Linux usando el nombre del archivo
- Buscar un archivo en su directorio actual usando el comando Buscar
- Buscar archivos de imagen en Linux usando la línea de comandos
- Buscar un archivo vacío en su directorio utilizando la línea de comandos
- Opciones y optimizaciones para encontrar archivos en Linux utilizando la línea de comandos
- Buscar archivos en Linux por la hora de modificación utilizando la línea de comandos
- Usa Grep para encontrar archivos en Linux usando la línea de comandos
- Procesar y encontrar archivos utilizando el comando Find en Linux
- Cómo buscar y eliminar archivos mediante la línea de comandos de Linux
Buscar archivos de Linux por nombre o extensión
Use find desde la línea de comandos para localizar un archivo específico por nombre o extensión. El siguiente ejemplo busca archivos *.err en el directorio /home/username/ y todos los subdirectorios:
find /home/username/ -name "*.err"
Debería ver una salida similar en su consola:
/home/username/example.errThe matching file in the /home/username/ directory is "example.err"
Comandos y sintaxis de búsqueda comunes de Linux
El comando find suele tener la siguiente forma:
find options starting/path expression
- El atributo
optionscontrola el comportamiento y el método de optimización del procesofind. - El atributo
starting/pathdefine el directorio de nivel superior dondefindcomienza a filtrar. - El atributo
expressioncontrola las pruebas que buscan en la jerarquía de directorios para producir la salida.
Buscar un archivo en Linux usando el nombre del archivo
Para encontrar un archivo usando el nombre del archivo, use la sintaxis find -name filename. Omitiendo la ruta se busca el archivo en todo el disco. Por ejemplo, puede encontrar un archivo llamado example.err ubicado en su directorio /home/username con el siguiente comando:
find -name example.err
Debería ver una salida similar:
./username/example.err
Buscar un archivo en su directorio actual usando el comando Buscar
Eche un vistazo a la estructura de directorios y archivos de ejemplo. Se hace referencia a ellos a lo largo de los ejemplos de esta guía.
├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err
Si se encuentra en directory_1 y desea encontrar el archivo example.err dentro del directorio o de cualquiera de sus subdirectorios, puede emitir el siguiente comando:
find . -name example.err
Su salida se asemeja a la siguiente:
./example.err./directory_1/example.err
La salida refleja la estructura del directorio directory_1:
├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err
Buscar archivos de imagen en Linux usando la línea de comandos
Referenciando la estructura de archivos de la sección anterior, hay una imagen llamada image01.png que se encuentra en la raíz (/)s de la estructura de directorios.
Para encontrar el archivo image01.png, ejecute el siguiente comando find que localiza todos los archivos .png almacenados dentro del directorio /.
find -name *.png
Debería ver una salida similar:
./image01.png
Cambie el tipo de archivo de imagen y busque cualquier archivo .jpg dentro del directorio raíz (/):
find -name *.jpg
La salida se parece al ejemplo. Consulte la estructura del directorio de ejemplo en la sección anterior para ver la ubicación del archivo.
./web_files/unnamed.jpg
Buscar un archivo vacío en su directorio utilizando la línea de comandos
Para encontrar un archivo vacío en su directorio utilizando la línea de comandos, emita el siguiente comando:
find . -type f -empty
Si no se devuelve ninguna salida, entonces no hay un archivo vacío dentro de su directorio actual.
Opciones y optimizaciones para encontrar archivos en Linux utilizando la línea de comandos
La configuración por defecto de find ignora los enlaces simbólicos. Si desea que find siga y devuelva los enlaces simbólicos, añada la opción -L al comando, como se muestra a continuación:
find -O3 -L /var/www/ -name "*.html"
Este comando habilita el máximo nivel de optimización (-O3) y permite que find siga los enlaces simbólicos (-L). find busca en todo el árbol de directorios debajo de /var/www/ los archivos que terminan en .html.
find optimiza su estrategia de filtrado para aumentar el rendimiento. Se especifican tres niveles de optimización seleccionables por el usuario como -O1, -O2 y -O3. La optimización -O1 es la predeterminada y obliga a find a filtrar basándose en el nombre de archivo antes de ejecutar todas las demás pruebas.
La optimización en el nivel -O2 prioriza los filtros de nombre de archivo, como en -O1, y luego ejecuta todo el filtrado de tipo de archivo antes de proceder con otras condiciones más intensivas en recursos. La optimización de nivel -O3 permite a find realizar la optimización más severa y reordena todas las pruebas basándose en su gasto relativo y en la probabilidad de que tengan éxito.
| Comando | Descripción |
|---|---|
-O1 |
Filtro basado en el nombre del archivo primero (por defecto). |
-O2 |
Nombre de archivo primero, luego tipo de archivo. |
-O3 |
Permitir que find reordene automáticamente la búsqueda basándose en el uso eficiente de los recursos y la probabilidad de éxito |
-maxdepth X |
Buscar en el directorio actual así como en todos los subdirectorios de X niveles de profundidad. |
-iname |
Buscar sin tener en cuenta el caso de texto. |
-not |
Devolver sólo los resultados que no coincidan con el caso de prueba. |
-type f |
Buscar archivos. |
-type d |
Buscar directorios. |
Buscar archivos en Linux por la hora de modificación utilizando la línea de comandos
El comando find puede filtrar una jerarquía de directorios basándose en la fecha de última modificación de un archivo. Por ejemplo, el siguiente comando encuentra cualquier archivo con la extensión .err que haya sido modificado en los últimos 7 días:
find / -name "*err" -mtime -7
El comando de ejemplo devuelve la siguiente salida:
/home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err
Usa Grep para encontrar archivos en Linux usando la línea de comandos
El comando find sólo puede filtrar la jerarquía de directorios basándose en el nombre y los metadatos de un archivo. Si necesita buscar basándose en el contenido del archivo, utilice una herramienta comoegrep. Considere el siguiente ejemplo:
find . -type f -exec grep "test" '{}' \; -print
Este comando busca cada objeto en la jerarquía de directorios actual (.) que sea un archivo (-type f) y luego ejecuta el comando grep "test" para cada archivo que satisfaga las condiciones. Los archivos que coinciden se imprimen en la pantalla (-print). Las llaves ({}) son un marcador de posición para los resultados de la búsqueda. Las {} están encerradas entre comillas simples (') para evitar entregar a grep un nombre de archivo malformado. El comando -exec termina con un punto y coma (;), que debe ser escapado (\;) para evitar su interpretación por el shell.
El archivo utilizado en el ejemplo (example.err) tiene un texto dentro de él que dice «test». Cuando se ejecuta el comando del ejemplo, se ve una salida similar:
test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err
Grep identificó cada archivo dentro del directorio de trabajo actual que contiene la cadena «test».
Nota
Antes de la implementación del comando
findde la opción-exec, se podía generar una salida similar al ejemplo anterior utilizando el comandoxargs:find . -type f -print | xargs grep "test"
Procesar y encontrar archivos utilizando el comando Find en Linux
La opción -exec ejecuta comandos contra cada objeto que coincide con la expresión find. Considere el siguiente ejemplo:
find . -name "example.err" -exec chmod o+r '{}' \;
Esto filtra cada objeto en la jerarquía actual (.) para los archivos llamados rc.conf y ejecuta el comando chmod o+r para modificar los permisos de los archivos de los resultados del comando find.
El comando de ejemplo ejecuta la opción -exec en el directorio raíz del proceso find. Utilice -execdir para ejecutar el comando especificado en el directorio donde reside la coincidencia. Esto puede aliviar las preocupaciones de seguridad y producir un mejor rendimiento para algunas operaciones.
Las opciones -exec o -execdir se ejecutan sin más indicaciones. Si prefiere que se le pregunte antes de realizar la acción, sustituya -exec por -ok o -execdir por -okdir.
Cómo buscar y eliminar archivos mediante la línea de comandos de Linux
Precaución
Utilice esta opción con extrema precaución.
Añada la opción -delete al final de una expresión coincidente para eliminar todos los archivos que coincidan. Utilice esta opción cuando esté seguro de que los resultados sólo coinciden con los archivos que desea eliminar.
En el ejemplo siguiente, find localiza recursivamente todos los archivos en la jerarquía que comienza en el directorio actual y elimina todos los archivos que terminan con la extensión .err:
find . -name "*.err" -delete
¿Todavía tiene algunas preguntas?
Únase a nuestra Comunidad y publique sus preguntas para que otros entusiastas de Linode y Linux le ayuden.
Preguntas relacionadas: