mandato find
Finalidad
Busca archivos con una expresión coincidente.
Sintaxis
Descripción
El mandato find busca de forma recursiva en el árbol de directorios para cada parámetro Path especificado, buscando archivos que coincidan con una expresión booleana. La expresión booleana se escribe utilizando los términos que se proporcionan en el texto siguiente. Cuando el mandato find está descendiendo de forma recursiva en las estructuras de directorios, no desciende a los directorios que están enlazados simbólicamente en la jerarquía actual. La salida del mandato find depende de los términos especificados por el parámetro Expresión .
El mandato find no da soporte a la sintaxis de búsqueda rápida de BSD 4.3 .
Distintivos
| Elemento | Descripción |
|---|---|
| -H | Hace que la información de archivo y el tipo de archivo que se evalúan para cada enlace simbólico que se encuentra en la línea de mandatos sean los del archivo al que hace referencia el enlace, y no el propio enlace. Si el archivo referenciado no existe, la información y el tipo de archivo son para el propio enlace. La información de archivo para todos los enlaces simbólicos que no están en la línea de mandatos es la del propio enlace. |
| -L | Hace que la información de archivo y el tipo de archivo que se evalúan para cada enlace simbólico sean los del archivo al que hace referencia el enlace, y no el propio enlace. |
Términos de expresión
| Elemento | Descripción |
|---|---|
| \(Expresión\) | Evalúa el valor True si la expresión entre paréntesis es true. |
| -amin n | El valor de n puede ser uno de los valores siguientes:
Por ejemplo, -amin 2 es verdadero si se accede al archivo en un plazo de 1 a 2 minutos. Nota: Los archivos a los que se accede después de la hora de inicio del mandato find no se tienen en cuenta. Sin embargo, cuando el mandato find se utiliza dentro del operador
NOT unario para el comportamiento noUNIX03 , los archivos que se modifican después de la hora de inicio del mandato se visualizan hasta el valor de n. |
| -atime n | El valor de n puede ser uno de los valores siguientes:
Nota: La definición de -atime se ha cambiado para cumplir con la especificación Single UNIX, Versión 3. El comportamiento anterior de -atime se evaluaba como Verdadero si se accedía al archivo en n-1 a n múltiplos de 24 horas. De forma predeterminada,
find -atime funciona como lo hacía antes de UNIX03. El comportamiento de UNIX03 se puede obtener estableciendo las variables de entorno XPG_SUS_ENV en ON y XPG_UNIX98 en OFF.El comportamiento anterior de esta opción se puede obtener estableciendo la variable XPG_UNIX98 en Los archivos a los que se accede después de la hora de inicio del mandato find no se tienen en cuenta. Sin embargo, cuando el mandato find se utiliza dentro del operador |
| -cmin n | El valor de n puede ser uno de los valores siguientes:
Nota: Los archivos con i-nodos que se modifican después de la hora de inicio del mandato find no se tienen en cuenta. Sin embargo, cuando se utiliza el mandato find dentro del operador
NOT unario para el comportamiento noUNIX03 , los archivos con i-nodos modificados después de la hora de inicio del mandato se visualizan hasta el valor de n. |
| -cpio Dispositivo | Escribe el archivo actual en el dispositivo especificado en el formato de mandato cpio . |
| -ctime n | El valor de n puede ser uno de los valores siguientes:
Nota: La definición de -ctime se ha cambiado para cumplir con la especificación Single UNIX, Versión 3. El comportamiento anterior de -ctime se evaluaba como Verdadero si se accedía al archivo en n-1 a n múltiplos de 24 horas. De forma predeterminada,
find -ctime funciona como lo hacía antes de UNIX03. El comportamiento de UNIX03 se puede obtener estableciendo las variables de entorno XPG_SUS_ENV en ON y XPG_UNIX98 en OFF.El comportamiento anterior de esta opción se puede obtener estableciendo la variable XPG_UNIX98 en Los archivos con i-nodos modificados después de la hora de inicio del mandato find no se tienen en cuenta. Sin embargo, cuando el mandato find se utiliza dentro del operador |
| -depth | Siempre se evalúa en el valor True. Hace que se realice el descenso de la jerarquía de directorios para que todas las entradas de un directorio se vean afectadas antes de que el propio directorio se vea afectado. Puede ser útil cuando se utiliza el mandato find con el mandato cpio para transferir archivos contenidos en directorios sin permiso de escritura. |
| -ea | Se evalúa en el valor True si el archivo tiene establecida la información de control de acceso (ACL) o los atributos ampliados (EA). |
| -exec Mandato | Evalúa el valor True si el mandato especificado se ejecuta y devuelve un valor 0 como estado de salida. El final del mandato especificado debe estar marcado con un punto y coma entre comillas, un punto y coma de escape o un signo más. Un argumento que contiene los dos caracteres {} (llaves) debe ir seguido de un signo más que puntualiza el final del mandato especificado. Un parámetro de mandato {} (llaves) se sustituye por el nombre de vía de acceso actual. |
| -follow | Hace que se sigan enlaces simbólicos y duros. |
| -fstype Tipo | Se evalúa con el valor True si el sistema de archivos al que pertenece el archivo es del tipo especificado. La variable Tipo tiene un valor de jfs (sistema de archivos de diario), nfs (sistema de archivos de red), jfs2 (sistema de archivos de diario ampliado), procfs (sistema de archivos de proceso), o namefs (sistema de archivos de nombres). |
| -group Grupo | Evalúa el valor True si el archivo pertenece al grupo especificado. Si el valor de la variable Grupo es numérico y no aparece en el archivo /etc/group , se interpreta como un ID de grupo. |
| -inum n | Se evalúa como el valor True si el archivo tiene un i-nodo que coincide con el valor de la variable n . |
| -links n | Evalúa el valor True si el archivo tiene el número especificado de enlaces. Consulte el mandato ln para obtener una descripción de los enlaces. |
| -iregex expresión_regular | Se evalúa con el valor True si el nombre de vía de acceso completo del archivo coincide con la expresión regular. Esta opción es similar a la opción -regex , excepto que la coincidencia no distingue entre mayúsculas y minúsculas. |
| -long | Imprime todos los caracteres disponibles de cada nombre de usuario/grupo en lugar de truncar a los primeros 8 cuando se utiliza en combinación con -ls. |
| -ls | Siempre se evalúa en el valor True. Hace que el nombre de vía de acceso actual se imprima junto con sus estadísticas asociadas. Estas estadísticas incluyen los valores siguientes:
Si el archivo es un archivo especial, el campo de tamaño contiene los números de dispositivo mayor y menor. Si el archivo es un enlace simbólico, el nombre de vía de acceso del archivo enlazado se imprime precedido por los símbolos-> (guión, mayor que). El formato es similar al del mandato ls -filds , sin embargo, el formato se realiza internamente sin ejecutar el mandato ls . Por lo tanto, es posible que existan diferencias en la salida con el mandato ls , como por ejemplo con la modalidad de protección. |
| -mmin n | El valor de n puede ser uno de los valores siguientes:
Nota: Los archivos que se modifican después de la hora de inicio del mandato find no se tienen en cuenta. Sin embargo, cuando el mandato find se utiliza dentro del operador
NOT unario para el comportamiento noUNIX03 , los archivos que se modifican después de la hora de inicio del mandato se visualizan hasta el valor de n. |
| -mtime n | El valor de n puede ser uno de los valores siguientes:
Nota: La definición de -mtime se ha modificado para cumplir con la Especificación UNIX única, Versión 3. El comportamiento anterior de -mtime se ha evaluado como Verdadero si el archivo se modifica en n-1 a n múltiplos de 24 horas. De forma predeterminada, find -mtime funciona como lo hacía antes de UNIX03. El comportamiento de UNIX03 se puede obtener estableciendo las variables de entorno XPG_SUS_ENV en
ON y XPG_UNIX98 en OFF.El comportamiento anterior de esta opción se puede obtener estableciendo la variable XPG_UNIX98 en Los archivos que se modifican después de la hora de inicio del mandato find no se tienen en cuenta. Sin embargo, cuando se utiliza el mandato find dentro del operador |
| -name Archivo | Se evalúa con el valor True si el valor de la variable Archivo coincide con el nombre de archivo. Se pueden utilizar los caracteres típicos de generación de nombres de archivos de shell (consulte el mandato sh ). El patrón debe estar entre comillas o caracteres de escape. El carácter de escape se utiliza cuando se utiliza el mandato find desde el shell. Se utiliza una barra inclinada invertida (\) como carácter de escape dentro del patrón. Puede utilizar caracteres comodín (coincidencia de patrones), siempre que estén entre comillas. En una expresión como [a-z], el guión significa a través de acuerdo con la secuencia de clasificación actual. Una secuencia de clasificación puede definir clases de equivalencia para su uso en rangos de caracteres. Para obtener más información sobre las secuencias de cotejo y las clases de equivalencia, consulte |
| -newer Archivo | Se evalúa en el valor True si el archivo actual se ha modificado más recientemente que el archivo indicado por la variable Archivo . |
| -nogroup | Se evalúa con el valor True si el archivo pertenece a un grupo que no está en la base de datos de /etc/group . |
| -nouser | Se evalúa con el valor True si el archivo pertenece a un usuario que no está en la base de datos de /etc/passwd . |
| -ok Mandato | Lo mismo que la expresión -exec , excepto que el mandato find verifica si debe iniciar el mandato especificado. Una respuesta afirmativa inicia el mandato. El final del mandato especificado debe estar marcado con un punto y coma que esté entre comillas o \; (barra inclinada invertida-punto y coma de escape). |
| -perm [-] OctalNumber | Evalúa el valor True si el código de permiso del archivo coincide exactamente con el parámetro OctalNumber . Para obtener detalles sobre los permisos de archivo, consulte el mandato chmod . Si el - (guión) opcional está presente, esta expresión se evalúa en el valor true si al menos se establecen estos permisos. El parámetro OctalNumber puede tener un máximo de 9 dígitos octales. Nota: Para los archivos que forman parte del entorno TCB, se añaden bits de seguridad adicionales al permiso de los archivos. Estos archivos tienen el conjunto de bits S_ITCB y el conjunto de bits de seguridad se define como 0x010000000. Por lo tanto, el valor de permisos octal de un archivo habilitado para TCB debe incluir el valor de bit 100000000 junto con sus otros bits de permiso.
Ejemplo: Para listar un archivo, que forma parte del entorno TCB, busque -perm 100000600 -print. Lista los nombres de los archivos que sólo tienen permiso de lectura y escritura de propietario y forman parte del entorno TCB. Consulte el mandato chmod para obtener una explicación de los códigos de permiso. |
| -perm [-] Modalidad | El argumento de modalidad se utiliza para representar bits de modalidad de archivo. Es idéntico en formato al operando < symbolicmode> descrito en chmod, y se interpreta del modo siguiente: Inicialmente, se presupone una plantilla con todos los bits de modalidad de archivo borrados. Los símbolos op (-) tienen la siguiente función:
El símbolo de operación Si se omite el guión, el primario se evalúa como Verdadero cuando los bits de permiso de archivo coinciden exactamente con el valor de la plantilla resultante. De lo contrario, si la modalidad tiene como prefijo un guión, el primario se evalúa como True si al menos todos los bits de la plantilla resultante se establecen en los bits de permiso de archivo. El parámetro Mode es idéntico a la sintaxis del mandato chmod . Esta expresión se evalúa en el valor True si el archivo tiene exactamente estos permisos. Si el - opcional (guión) está presente, esta expresión se evalúa en el valor True si se establecen al menos estos permisos. |
| Siempre se evalúa en el valor True. Muestra el nombre de vía de acceso actual. El mandato find presupone una expresión -print , a menos que estén presentes las expresiones -exec, - lso -ok . | |
| -prune | Siempre se evalúa en el valor True. Detiene el descenso del nombre de vía de acceso actual si es un directorio. Si se especifica el distintivo -depth , se ignora el distintivo -prune . |
| -size n | Evalúa el valor True si el archivo es el n especificado de bloques de longitud (512 bytes por bloque). El tamaño del archivo se redondea al bloque más cercano para su comparación. |
| -regex expresión_regular | Se evalúa con el valor True si el nombre de vía de acceso completo del archivo coincide con la expresión regular. Esta opción no busca la expresión regular pero coincide con la expresión regular con el nombre de vía de acceso completo del archivo. Por ejemplo, para que coincida con un archivo denominado ./test, puede utilizar la expresión regular .*test.* o .*t.*t, pero no t.*t. |
| -regextype Tipo | Siempre se evalúa en el valor True. Esta opción especifica el tipo de sintaxis de expresión regular para las opciones -regex y -iregex . También afecta a las expresiones regulares que se producen más adelante en la línea de mandatos. La variable Tipo puede tener uno de los valores siguientes:
Nota: Si no se utiliza la opción -regextype , las expresiones regulares se interpretan como
basic. |
| -size nc | Se evalúa en el valor True si el archivo es exactamente el n especificado de longitud de bytes. Añadir c al final de la variable n indica que el tamaño del archivo se mide en bytes individuales, no en bloques. |
| -type Tipo | Se evalúa en el valor True si la variable Tipo especifica uno de los valores siguientes:
|
| -user Usuario | Evalúa el valor True si el archivo pertenece al usuario especificado. Si el valor de la variable Usuario es numérico y no aparece como nombre de inicio de sesión en el archivo /etc/passwd , se interpreta como un ID de usuario. |
| -xdev | Siempre se evalúa en el valor True. Impide que el mandato find atraviese un sistema de archivos distinto del especificado por el parámetro Vía de acceso . |
Estas expresiones se pueden combinar utilizando los operadores siguientes en el orden de prioridad decreciente:
- ( Expresión ) -Un grupo entre paréntesis de expresiones y operadores (los paréntesis son especiales para el shell y requieren la secuencia de escape de barra inclinada invertida).
- ! Expresión -La negación de una expresión ('!' es el operador NOT unario).
- Expresión [ -a ] Expresión -Concatenación de expresiones (la operación AND está implícita en la yuxtaposición de dos primarios o se puede indicar explícitamente como -a).
- Expresión -o Expresión -Alternativa de primarios; -o es el operador OR. La segunda expresión no se evalúa si la primera expresión es verdadera.
-follow y la opción -L con el mandato cpio . No utilizar estas dos opciones juntas produce resultados indeseables. Si la expresión no está presente, -print tal como se utiliza en la expresión predeterminada. Por ejemplo, si la expresión especificada no contiene ninguno de los primarios -exec, -ok o -print, la expresión se sustituye por (given_expression)
-print. Los primarios -user, -groupy -newer evalúan cada uno sus argumentos respectivos sólo una vez. El uso de un mandato especificado por -exec o -ok no afecta a los primarios posteriores en el mismo archivo.Estado de salida
Este mandato devuelve los siguientes valores de salida:
| Elemento | Descripción |
|---|---|
| 0 | Todos los parámetros de Vía de acceso se han atravesado correctamente. |
| >0 | Se ha producido un error. |
Ejemplos
- Para listar todos los archivos del sistema de archivos con un nombre de archivo base especificado, escriba:
Este mandato busca en todo el sistema de archivos y escribe los nombres de vía de acceso completos de todos los archivos denominados .profile. Los 2 /(barra inclinada) indica al mandato find que busque en el directorio raíz y en todos sus subdirectorios. Para no perder tiempo, es mejor limitar la búsqueda especificando los directorios en los que cree que pueden estar los archivos.find / -name .profile -print - Para listar los archivos que tienen un código de permiso específico en el árbol de directorios actual, escriba:
Este mandato lista los nombres de los archivos que sólo tienen permiso de lectura y grabación de propietario. El. (punto) indica al mandato find que busque en el directorio actual y sus subdirectorios. Consulte el mandato chmod para obtener una explicación de los códigos de permiso.find . -perm 0600 -print - Para buscar en varios directorios archivos con determinados códigos de permiso, escriba:
Este mandato lista los nombres de los archivos que tienen permisos de lectura y escritura de propietario y posiblemente otros permisos. Los 2manual,clients, yproposalsy sus subdirectorios. En el ejemplo anterior,-perm 0600selecciona sólo los archivos con códigos de permiso que coinciden0600exactamente. En este ejemplo,-perm -0600selecciona archivos con códigos de permiso que permiten los accesos indicados por0600y otros accesos por encima del0600nivel. También coincide con los códigos de permiso 0622 y 0744.find manual clients proposals -perm -0600 -print - Para obtener una lista de todos los archivos del directorio actual que se han modificado durante el período de 24 horas actual, escriba:
find . -ctime 1 -print - Para buscar archivos normales con varios enlaces, escriba:
Este mandato lista los nombres de los archivos ordinarios (-type f). que tienen más de un enlace (-links +1).find . -type f -links +1 -printNota: Cada directorio tiene al menos dos enlaces: la entrada en su directorio padre y el suyo propio.entrada (punto). El mandato ln explica varios enlaces de archivo. - Para encontrar todos los archivos accesibles cuyo nombre de ruta contenga ' find, escriba:
find . -name '*find*' -print - Para eliminar todos los archivos con nombrea.outo*.oa los que no se accede durante una semana y que no se montan utilizando "
nfs, tipo:find / \( -name a.out -o -name '*.o' \) -atime +7 ! -fstype nfs -exec rm {} \;Nota: El número que se utiliza en la expresión -atime es+7. Es la entrada correcta si desea que el mandato actúe sobre los archivos a los que no se accede durante más de una semana (siete periodos de 24 horas). - Para imprimir los nombres de ruta de todos los archivos que se encuentran en el directorio actual o por debajo de él, excepto los directorios denominados '
SCCS' o los archivos de los directorios 'SCCS', escriba:
Para imprimir los nombres de vía de acceso de todos los archivos dentro o debajo del directorio actual, incluidos los nombres de los directoriosfind . -name SCCS -prune -o -printSCCS, escriba:find . -print -name SCCS -prune - Para buscar todos los archivos que tengan exactamente 414 bytes, escriba:
find . -size 414c -print - Para encontrar y eliminar todos los archivos de su directorio personal con el sufijo ' .c ', escriba:
Cada vez que el mandato find identifica un archivo con el sufijo .c , el mandato rm suprime dicho archivo. El mandato rm es el único parámetro especificado para la expresión -exec . Las {} (llaves) representan el nombre de vía de acceso actual.find /u/arnold -name "*.c" -exec rm {} \; - En este ejemplo,
dirlinkes un enlace simbólico al directoriodir. Para listar los archivos en 'dir' haciendo referencia al enlace simbólico 'dirlink' en la línea de comandos, escriba:find -H dirlink -print - En este ejemplo,
dirlinkes un enlace simbólico al directoriodir. Para listar los archivos en 'dirlink, recorriendo la jerarquía de archivos bajo 'dirincluyendo cualquier enlace simbólico, escriba:find -L dirlink -print - Para determinar si el fichero '
dir1al que hace referencia el enlace simbólico 'dirlink' es más reciente que 'dir2, escriba:find -H dirlink -newer dir2Nota: Puesto que se utiliza el distintivo -H , los datos de hora no se recopilan dedirlinksino dedir1, que se encuentra atravesando el enlace simbólico. - Para producir un listado de archivos en el directorio actual en formato ' ls ' con nombre de usuario y grupo expandidos, escriba:
find . -ls -long - Para listar los archivos con ACL/EA en el directorio actual, escriba:
find . -ea - Para listar los ficheros que se modifican en 60 minutos, escriba:
find . -mmin -60 - Para encontrar todos los nombres de ruta en el directorio ' /home ' que contengan un patrón '
afileen el nombre de ruta, escriba el siguiente comando:find /home -regextype basic -regex ".*afile.*" - Para encontrar todos los nombres de ruta en el directorio ' /home ' que contengan un patrón '
afileo 'capen el nombre de ruta, escriba el siguiente comando:find /home -regextype extended -regex ".*afile.*|.*cap.*" - Para encontrar todos los nombres de ruta en el directorio ' /home ' que contengan un patrón '
afile, 'AFILE, 'cap, o 'CApen el nombre de ruta, escriba el siguiente comando:find /home -regextype extended -iregex ".*afile.*|.*cap.*"
Archivos
| Elemento | Descripción |
|---|---|
| /usr/bin/find | Contiene el mandato find . |
| /bin/find | Enlace simbólico al mandato find . |
| /etc/group | Contiene una lista de todos los grupos conocidos. |
| /etc/passwd | Contiene una lista de todos los usuarios conocidos. |