¿Alguna vez se ha quedado atascado buscando un archivo y no pudo recordar dónde lo guardó, y mucho menos el nombre del archivo en sí? En Linux, Bash find
El comando lo ayudará a explorar su sistema para encontrar ese archivo.
El Golpe find
El comando en Linux ofrece muchas formas de buscar archivos y directorios. En este tutorial, aprenderá cómo el último acceso a un archivo, los permisos y más pueden ayudar a encontrar archivos y directorios con Bash find
dominio. ¡Empecemos!
Requisitos
Si desea seguir las diversas demostraciones de este tutorial, asegúrese de tener lo siguiente:
- Una PC con Linux:este tutorial usa Ubuntu 20.04, pero cualquier distribución de Linux debería funcionar.
- El
find
utilidad:la utilidad de búsqueda de Bash ya debería estar en todas las distribuciones de Linux. Este tutorial utiliza v4.7.0.
The Bash find
Comando 101
Encontrar un archivo requiere algunos criterios; una parte del nombre del archivo, un tipo de archivo, permisos en el archivo, etc. El find
El comando le permite definir esos criterios para limitar los archivos exactos que le gustaría encontrar. El comando find encuentra o busca también enlaces simbólicos (symlink). Un enlace simbólico es un archivo de acceso directo de Linux que apunta a otro archivo o carpeta en su computadora. Primero cubramos la forma más básica de usar Bash find
comando.
Tal vez esté en su directorio de inicio, buscando un directorio llamado snap y todos los archivos y subdirectorios debajo de él. En ese caso, ejecute el find
comando, seguido del nombre del directorio ("snap"
), ¡y eso es todo!
Dado que no hay otros argumentos de línea de comando a continuación, puede ver la lista de archivos y directorios que se encuentran recursivamente dentro del snap directorio.
find "snap"
Si no especifica el
name
parámetro,find
asumirá que el primer argumento debe ser para elname
parámetro, por ejemplo,find "snap"
es lo mismo quefind -name "snap
.”
Buscar archivos con pruebas (también conocidos como filtros)
Has visto la forma más básica del find
Comando y cómo funciona. Pero quizás quieras acotar un poco la búsqueda para definir criterios más específicos. Si es así, deberá aplicar pruebas. Las pruebas son criterios que proporcionas al find
comando.
Las pruebas le dicen al find
Comando para filtrar la salida en función de muchos criterios diferentes.
Buscar archivos por nombre de archivo o directorio
Tal vez solo recuerde cómo comienza el nombre del archivo, tal vez sin distinguir entre mayúsculas y minúsculas. En ese caso, puede usar un comodín para ayudar a reducir los resultados.
# Find files and directories with names starting with 'snap'
find -name "snap*"
# Find files and directories with names starting with 'snap'
# in case insensitive manner (For example:'Snap', 'snap', 'SNaP', etc.)
find -iname "snap*"
Búsqueda de archivos y directorios por tipo de archivo
Me gusta el -name
prueba, el -type
test es otra forma eficiente de encontrar archivos y directorios. El -type
test te permite filtrar el resultado del find
comando por archivos o directorios.
# Find a file named 'snap'
find "snap" -type f
# Find a directory named 'snap'
find "snap" -type d
Para restringir aún más la búsqueda de archivos, combine el -name
y -type
pruebas ejecutando el siguiente comando.
El find
El siguiente comando busca directorios únicamente (-type d
) con nombres (-name
) que comienzan con snap
.
find -name "snap*" -type d
Buscar archivos y directorios con pruebas y operadores
Ahora que has aprendido los conceptos básicos del find
comando combinado con pruebas, es hora de llevar la búsqueda de archivos a un nivel superior. Quizás necesite encontrar archivos o directorios que coincidan con más de una condición, como el nombre y el tipo de archivo. En ese caso, debe combinar condiciones.
Cuando necesite agregar más de una condición para buscar archivos, puede combinar condiciones con operadores. Los operadores son elementos que le permiten combinar condiciones para formar pruebas/filtros más complejos.
Combinar dos condiciones con el -and
Operador
Tal vez necesite encontrar algunos archivos o directorios que coincidan con un nombre específico y escribe. Para hacer eso, puedes usar el -and
operador. El -and
El operador le permite combinar dos o más expresiones y generar el resultado solo si el comando de búsqueda devuelve un valor verdadero. Las expresiones son las representaciones de ciertas condiciones, como cuando se filtran archivos por nombre (-name "snap"
).
Para demostrar cómo el -and
El operador combina dos condiciones, ejecuta cada uno de los siguientes comandos.
# Find files only (-type f) and (-and) ensure the names (-name) start with snap
# in the current directory and subdirectories.
find -name "snap*" -and -type f
# Find directories only (-type d) and (-and) ensure the names (-name) start with snap
# in the current directory and subdirectories.
find -name "snap*" -and -type d
# Find files only (-type f) and (-and) ensure the names (-name) start with snap
find -name "snap" -and -type f
# Find directories only (-type d) and (-and) ensure the names (-name) start with snap
find -name "snap" -and -type d
Combinar dos condiciones con el -or
Operador
Como el -and
operador, el -or
operador (-o
) también combina dos expresiones separadas. La diferencia es que el find
El comando generará resultados incluso si solo una expresión es verdadera.
A continuación se muestra una sintaxis básica de cómo combinar dos condiciones con el -or
operador. El find
El comando genera el resultado incluso si solo uno, ya sea expr1 o expr2, devuelve un valor verdadero.
find -or
Tal vez le gustaría encontrar un nombre de archivo usando el -name
parámetro de un tipo específico usando el -type
parámetro. Si es así, ejecute el find
comando a continuación para buscar archivos (-type f
) con nombres (-name
) que comienzan con snap
-or
chart
.
find -name "snap*" -type f -or -name "chart*"
Filtrado de archivos con -not
Operador
A diferencia de los dos primeros operadores en los que filtras los contenidos que buscas, el -not
operador (!
) es lo contrario. El -not
El operador excluye archivos y directorios que no desea ver en el resultado de la búsqueda.
Tal vez desee buscar archivos solo con nombres que no comenzar con un nombre específico. En ese caso, ejecute el siguiente comando. Observe el find
El siguiente comando solo busca archivos (-type f
), con nombres (-name
) que no comienza con snap
.
find -not -name "snap*" -type f
Buscar archivos agrupando expresiones
A estas alturas, ha aprendido a usar pruebas y operadores para filtrar el find
resultado del comando. Pero, ¿y si el resultado de su objetivo es un poco complejo? Si es así, debe buscar expresiones de agrupación. El Golpe find
El comando le permite agrupar expresiones, lo que significa definir dos o más "conjuntos" de condiciones.
Agrupar expresiones con paréntesis
Digamos que necesita encontrar archivos o directorios con diferentes nombres. Pronto encontrarás que la tarea es imposible usando el find
conceptos básicos de comando, como se explicó anteriormente. Como solución, necesitará usar paréntesis para combinar las expresiones para formar una sola expresión compleja.
En este ejemplo a continuación, el find
El comando buscará archivos (-type f
) con .html
extensión o directorios (-type d
) con nombres que comienzan con chart
.
Tanto los paréntesis de apertura como de cierre se escapan con una barra invertida (
\
) para permitir que el terminal lea los paréntesis literalmente. El carácter de escape le dice alfind
comando para tratar al personaje literalmente.
find \( -name "*.html" -type f \) -or \( -name "chart*" -type d \)
En lugar de usar paréntesis, también puede usar comas para agrupar expresiones como
find -name "snap*" -type d -delete, -name "chart*" -print
. Agrupar expresiones por comas es básicamente una serie de tareas en ejecución en un solo comando.
Buscando archivos desde el directorio principal
En todos los ejemplos anteriores, Bash find
El comando encontró archivos solo del directorio de trabajo actual y todos los subdirectorios. Pero tal vez necesite comenzar su búsqueda en el directorio principal. Si es así, da el -depth
opción un tiro. El -depth
El parámetro enumera archivos y directorios en orden de profundidad, como se muestra a continuación.
El find
El siguiente comando enumera primero el contenido del directorio principal y luego hasta el directorio de trabajo (snap
).
find "snap" -depth
Búsqueda de archivos y directorios por permiso
En lugar de buscar archivos filtrados por nombre y tipo, el comando de búsqueda también le permite buscar archivos y directorios filtrados por permiso. En Linux, cada archivo y carpeta tiene permisos específicos para propietarios, propietarios de grupos y otros usuarios. El find
El comando le permite aprovechar esos permisos para filtrar el resultado de la búsqueda de archivos y directorios con el -perm
opción.
Antes de intentar buscar archivos y directorios con el
-perm
opción, deberá familiarizarse con los permisos de lectura. Los permisos indican quién tiene acceso y puede modificar ciertos archivos y directorios.
Búsqueda de archivos a través del modo simbólico
Ahora que comprende el concepto de permisos de archivo, intente encontrar archivos a través del modo simbólico. El modo simbólico utiliza una combinación de letras y símbolos para representar los permisos de archivo.
Para demostrar cómo encontrar archivos a través del modo simbólico, ejecute cada uno de los siguientes comandos.
# Find only files (-type f) in the working directory (.)
# with read, write and execute permissions for user, group and others in the current
find . -perm u=rwx,g=rwx,o=rwx -type f
# Find files (-type f) in the working directory (.)
# with any of the read, write and execute permissions (not the exact)
# for user, group and others in the current
find . -perm -u=rwx,g=rwx,o=rwx -type f
# Find files (including hidden files) where either of the user, group or others
# have read, write and execute access to files in the working directory (.)
find . -perm /u=rwx,g=rwx,o=rwx -type f
Búsqueda de archivos y directorios a través del modo absoluto
Si no prefiere buscar archivos a través del modo simbólico, entonces el modo absoluto puede despertar su interés. El modo absoluto define los permisos en representación numérica octal frente al uso de letras.
A continuación puede ver que el modo simbólico -rwxrwxrwx es equivalente al modo absoluto 777 .
Digamos que solo desea buscar archivos y directorios con permiso de solo lectura para usuarios, grupos y otros. Si es así, ejecute cada uno de los comandos a continuación para ver los resultados que obtendrá al buscar archivos y directorios a través del modo absoluto.
# Find files and directories only with read-only permission
# for user, group and others in the working directory (.)
find . -perm 444
# Find files and directories only that have least the read-only permission
# for user, group and others in the working directory (.)
find . -perm -444
# Find files and directories only (including hidden files and directories)
# that have least the read-only permission
# for user, group and others in the working directory (.)
find . -perm /444
Modificar la salida de resultados de búsqueda con el -print
Parámetro
En lugar de solo mostrar las rutas de los archivos en el resultado de la búsqueda, quizás también desee ver sus propiedades. Usando el -print
acción, puede modificar la salida el find
el comando produce.
El -print
El parámetro es el comportamiento predeterminado cuando ejecuta el find
donde imprime el resultado de la búsqueda de archivos, cada uno en una nueva línea. Entonces, ejecute cualquiera de los comandos a continuación para find
archivos y directorios llamados snap
, obtendrás el mismo resultado.
find -name "snap" -print
find -name "snap"
Buscar e imprimir nombres de archivos sin espacios en blanco
A diferencia del predeterminado -print
parámetro, el -print0
La opción le permite borrar espacios en blanco o caracteres de nueva línea en un resultado de búsqueda devuelto por el find
dominio. Especialmente cuando estás pasando el resultado a otro comando como grep
para buscar patrones.
El siguiente comando le permite buscar y generar un directorio sin espacios en blanco ni caracteres de nueva línea.
# Find a file or directory named 'snap', print the result
# removing white spaces and newline characters
find -name "snap" -print0
Buscar e imprimir archivos con propiedades mediante formato de impresión
Para cambiar el formato de la salida, el find
el comando también tiene un -printf
parámetro. Este parámetro le permite crear directivas o "formateadores" que definen cómo se verá el resultado de la búsqueda.
Tal vez necesite encontrar archivos junto con sus propiedades como la última vez que se accedió a ellos. Si es así, ejecute los siguientes comandos.
# Find files only with names starting with 'snap', then print each file
# along with their last-time access properties, full path and filename
# each on a new line
find -name "snap*" -printf "%a %p \n"
# Find files with .html or .json extension
# then print each file owner's username, group name, full path and filename
# each on a new line
find \( -name "*.html" -type f \) -or -name "*.json" -printf "%u %g %p \n"
A continuación se muestra una lista de directivas disponibles para trabajar codo con codo con el -printf
acción:
%a
– Devuelve la última vez que se accedió a un archivo.%b
– Devuelve la cantidad de espacio en disco utilizado para un archivo en bloques de 512 bytes.%d
– Devuelve la profundidad de un archivo en el árbol de directorios.%g
– Devuelve el nombre de grupo de un archivo o el ID de grupo numérico si el grupo no tiene nombre.%k
– Devuelve la cantidad de espacio en disco utilizado para un archivo en bloques de 1K.%m
– Devuelve los bits de permiso de un archivo (en octal).%p
– Devuelve el nombre de archivo exacto de un archivo.%s
– Devuelve el tamaño de un archivo en bytes.%t
– Devuelve la hora de la última modificación de un archivo en el formato devuelto por el-ctime
opción.%u
– Devuelve el nombre de usuario del propietario del archivo o el ID de usuario numérico si el usuario no tiene nombre.
Limitación de la profundidad de búsqueda de archivos
Quizás desee acotar más y limitar la búsqueda en directorios; necesitarás usar el -maxdepth
opción con el find
comando, como se muestra a continuación.
El -maxdepth
parámetro le dice al find
Comando para limitar el alcance de la búsqueda a solo un cierto número de subdirectorios en el árbol de directorios.
# Find files and directories one step down from the working directory
find . -maxdepth 1 -name "chart*"
# Find files and directories two steps down from the ~/chart directory
find ~/chart -maxdepth 2 -name "chart"
Buscar archivos limitados al directorio de trabajo con -prune
Opción
Si necesita limitar una búsqueda solo al directorio de trabajo actual y no recurrir a ningún subdirectorio, consulte el -prune
parámetro.
En el siguiente comando, find
archivos y directorios cuyos nombres (-name
) no comience con snap
y está limitado (-prune
) al directorio de trabajo (.
).
Para obtener resultados de búsqueda de archivos y carpetas con nombres que comienzan en
snap
en su lugar, elimine el-or
operador y-print action
, así:find . -name "snap*" -prune
find . -name "snap*" -prune -or -print
Búsqueda de archivos y directorios a través del último acceso
La poda de archivos particulares seguramente reduce el resultado de la búsqueda. Pero, ¿qué sucede si lo único que recuerda sobre el archivo que está buscando es la última vez que accedió a ese archivo? Bueno, la buena noticia es que el comando de búsqueda le permite buscar archivos y directorios a través de su último acceso. ¡Vamos a sumergirnos!
Búsqueda de archivos a través del acceso del último día del archivo
Digamos que aún recuerdas el último día que accediste a un archivo o directorio, entonces el -atime
opción combinada con el find
comando es todo lo que necesita, como se demuestra a continuación. Si la última vez que se accedió a un archivo no se encuentra dentro del valor que especificó, el find
El comando devuelve un valor falso y omite ese archivo.
# Find files and directories you last accessed between 2-3 days ago
find -atime 2
# Find files and directories you last accessed within the past 2 days
find -atime -2
# Find files and directories you last accessed within the past day
find -atime 0
Quizás también desee ver la última vez que accedió a un archivo o directorio, luego agregue el
-printf
acción con directivas. La siguiente línea de comando le permitefind
archivos a los que se accedió el día anterior (-atime 0
). Luego el-printf
La acción muestra la última vez que se accedió (%a
) de archivos o directorios y los nombres de archivo (%p
), cada uno en una nueva línea (\n
), como se muestra a continuación.
find -atime 2 -printf "%a %p \n"
Búsqueda de archivos a través del acceso de último minuto del archivo
Digamos que necesita encontrar archivos basados en el minuto. Como el -atime
opción, el -amin
funciona igual. Pero en su lugar, obtendrá resultados de búsqueda de archivos filtrados por su último acceso según el valor que especificó, como se muestra a continuación.
# Find files and directories accessed within the past 40 minutes
# Not ideal most of the time as you will get result of tons of files and directories
find -amin 40
# Find directories accessed within the past 40 minutes
find -name "snap*" -type d -amin -40
# Find files accessed within the past 40 minutes
find -name "snap*" -type f -amin -40
Búsqueda de archivos y directorios a través del último cambio
Encontrar archivos o directorios a través del último acceso puede generar toneladas de resultados, lo que parecería confuso si los nombres de los archivos son similares. Entonces, para reducir aún más el resultado de la búsqueda, vaya con -ctime
opción en su lugar. El -ctime
La opción filtra el resultado de la búsqueda por la última vez que realizó cambios en el archivo o directorio en función de un valor específico (en los últimos días).
Tal vez desee buscar archivos que modificó hace dos días. Si es así, ejecute los comandos de muestra a continuación.
# Find files and directories you modifed in the past two days
find -ctime -2
# Find files and directories with names starting with 'snap'
# which you modifed in the past two days
find -name "snap*" -ctime -2
Ejecutar un comando después de encontrar un archivo o directorio
El find
el comando no solo encuentra archivos y directorios; también puede ejecutar comandos justo después de mostrar los resultados de búsqueda usando el -exec
parámetro. Esta característica es excelente para cuando desea abrir un archivo en un editor de texto o eliminar un archivo o directorio una vez encontrado, por ejemplo.
Asegúrese de escapar de los puntos y comas (
;
) con una barra invertida (\
) para evitar su interpretación.
# Find a file named 'snap.doc' then open the file in vi editor
find -name "snap.doc" -exec vi {} \;
# Find a file named 'snap.doc' then remove the file
find -name "snap.doc" -exec rm {} \;
Eliminar archivos y directorios con -delete
Acción
El find
El comando no solo te permite encontrar archivos como has aprendido hasta ahora. El find
El comando también le brinda la opción de eliminar un archivo automáticamente una vez que se encuentra. Tal vez necesite eliminar archivos o directorios vacíos con un nombre específico o que coincidan con un patrón específico. Luego el find
comando con el -delete
la acción definitivamente será útil.
Para demostrar la eliminación de archivos y directorios con el -delete
acción, primero cree un directorio y un archivo. A continuación, las líneas de comando le permiten crear (mkdir
) un directorio llamado (thanos
), luego un archivo llamado snap
dentro del thanos
directorio.
mkdir thanos
touch thanos/snap
El -delete
La acción solo elimina directorios vacíos. Entonces, si intenta eliminar el thanos
directorio con la línea de comando a continuación, recibirá un mensaje que dice buscar:no se puede eliminar 'thanos':el directorio no está vacío.
Para eliminar un solo archivo (
snap
), especifica el-type
prueba cuando ejecutas el comando de búsqueda, así:find "snap" -type f -delete
# Find a directory named 'thanos', then delete the directory
# This command fails since the 'thanos' directory is not empty
find "thanos" -type d -delete
# Find a file named 'thanos.snap', then delete the file
find "thanos.snap" -type f -delete
Para eliminar el ~/thanos directorio, aplique el -depth
opción, como se muestra a continuación. El find
el comando buscará el thanos
directorio y eliminar recursivamente (-delete
) el contenido de ~/thanos directorio y eliminar el directorio mismo.
find "thanos" -depth -delete
Conclusión
Este artículo tiene como objetivo enseñarle diferentes formas de cómo el comando Bash find le permite ubicar archivos, obtener propiedades de archivos e incluso modificar una salida en ciertos formatos. Antes, encontrar un archivo perdido estaba lleno de obstáculos en el camino. Pero ahora, puedes saltar los obstáculos e ir directamente a la línea de meta. ¿Es eso considerado hacer trampa?
Bueno, independientemente del método con el que intentaste encontrar tu archivo, ¡la experiencia seguramente es satisfactoria! Entonces, ¿qué prueba, acción u opción te pareció más interesante?