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
options
controla el comportamiento y el método de optimización del procesofind
. - El atributo
starting/path
define el directorio de nivel superior dondefind
comienza a filtrar. - El atributo
expression
controla 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 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: