Cómo buscar archivos en Linux usando la línea de comandos

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

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 options controla el comportamiento y el método de optimización del proceso find.
  • El atributo starting/path define el directorio de nivel superior donde find comienza 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 find de la opción -exec, se podía generar una salida similar al ejemplo anterior utilizando el comando xargs:

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:

Deja una respuesta

Tu dirección de correo electrónico no será publicada.