Comando find Unix con 9 ejemplos detallados

comando find unix

El comando find es un comando Shell externo de Linux que nos permite buscar ficheros y directorios dentro de un directorio en concreto y  de forma recursiva en todo el árbol de éste último verificando algunos criterios sobre los ficheros que le pasamos como opciones.

Sintaxis del comando find

find «directorio» «criterios» «opciones»

Opciones del comando find

  • Si no se ha especificado ningún criterio, entonces el comando find buscará recursivamente todos los ficheros y directorios del directorio especificado en el comando.
  • La opción -print: es implícita en la mayoría de los sistemas operativos y distribuciones basadas sobre Unix. Nos permite visualizar los resultados sobre la salida estándar (en nuestro caso la pantalla o el terminal).

Criterios

Los criterios de búsqueda son:

  • -name: busca en función del nombre de un fichero en concreto. Podemos utilizar también meta-caracteres o expresiones regulares para conseguir un resultado mas preciso.
  • -inum: buscar en función del número del ínodo de un fichero. 
  • -perm: busca en función de los derechos o permisos de acceso del fichero.
  • -links: busca en función del número de los enlaces del fichero.
  • -user: buscar en función del propietario del fichero.
  • -group: busca en función del grupo al que pertenece el fichero.
  • -type: buscar en función del tipo de fichero y tiene como valores :(d = directorio, f = fichero ordinario, l = enlace simbólico, p = tubería o pipes).
  • -size: busca en función del tamaño del archivo con número de bloques (1 bloques=512 octetos).
  • -atime: busca en función de la fecha del último acceso en lectura del archivo (atime= access+time).
  • -mtime: busca en función de la fecha de la última modificación del archivo (mtime= modification+time).
  • -ctime: busca en función de la fecha de la creación del fichero.
  • -ls: visualiza informaciones detalladas sobre los archivos buscados en lugar de listar solo los nombre de los archivos.
  • – exec: Comandos como opción: Lo explicaré al final de articulo.
Podemos combinar muchos criterios a la vez utilizando operadores lógicos «AND y OR». Ejemplos:
  1. Para la intersección o combinar criterios con el operador lógico «y» tenemos dos opciones. La primera opción con el operador «-a»  :  citerio1 -a criterio2 -a criterio3. O simplemente sin ninguna expresión: criterio1 criterio2 criterio3.
  2. Para hacer la negación de un criterio utilizamos el símbolo «!» : !criterio
  3. Para la unión o combinar criterio con el operador «o»: (criterio1 -o criterio2)

Ejemplos

Ejemplo 1, sobre el comando find opción -name:

Buscar y visualizar todos los ficheros nombrados «test.c» desde el directorio «home»:
$ find /home -name test.c -print
Ejemplo 2, sobre el comando find opción -name:
 
Buscar y visualizar todos los archivos que terminan con la cadena «.txt» desde el directorio corriente:
$ find . -name «*.txt» -print
o
$ find . -name ‘*.txt’ -print 

Notas: 

  • Como puedes observar tenemos la opción de usar comillas simples o comillas dobles. 
  • El meta-carácter «*» remplaza todos los caracteres o cadenas de caracteres.
  • «*.txt»: remplaza todos los nombres que terminan con .txt y empiezan con cualquier cadena de caraceres.
  • -print: si no añadimos esta opción no se visualiza nada sobre la terminal del Shell.
  • Si la forma de la ruta del directorio que hemos expresado es una ruta absoluta (ej: /home/usuario/doc/test/…) las rutas en el resultado también se verán de forma absoluta y viceversa para las rutas relativas. En el caso del ejemplo anterior hemos especificado una ruta relativa con el punto «.», entonces el resultado será de esta forma: {./test.txt} si existe un solo fichero con el formato .txt.
Ejemplo 3, sobre el comando find opción -inum:
 
Suponemos que el archivo «arch», localizado en el sub-directorio «cursos», tiene como número de ínodo «1211». y suponemos que «cursos» es un directorio hijo del directorio corriente.
$ find . -inum 1211 -print
./cursos/arch
Ejemplo 4, sobre el comando find opción -type: 
 
Buscar y visualizar todos los directorios los cuales sus nombres empiezan con la cadena «ar»:
$ find . -name «ar*» -type d -print
./arch1
./arch2
 Ejemplo 5, sobre el comando find opción -user:
 
Buscar todos los archivos, que pertenecen al propietario «estudiante» y al grupo «Informatica», desde el directorio actual.
$ find . -type f -user estudiante -group Informatica -print
./archivo1
./archivo2
./.perfil
Ejemplo 6, sobre el comando find opción -ls:
 
Buscar y visualizar el archivo de ínodo 1391 desde el directorio corriente:
$ find . -inum 1391 -print
./curso/arch
Buscar y visualizar el archivo de ínodo 1391 desde el directorio corriente listando una información detallada:
$ find . -inum 1391 -ls
1391 572 -rwxr-xr-x 1 estudiante Informatica 582192 2014-23-10 10:55 ./curso/arch.
./curso/arch 
Nota: el valor 582192 representa el tamaño del archivo en octetos.
 
Ejemplo 7, sobre el comando find opción -mtime:
 
Buscar y visualizar los últimos archivos modificados en los últimos 3 días en todo el arbol del sistema operativo (desde la raíz / ):
find / -mtime 3 -print
Ejemplo 8, sobre el comando find opción -size:
 
Buscar y visualizar todos los archivos que sus tamaños superan a 1 Mo en todo el árbol del sistema operativo: 
find / -size 2000 -print
Nota: el valor 2000 representa el número de bloques sabiendo que cada bloc tiene 512 Ko en tamaño. Entonces: 2000 x 512 Ko = 1 Mo.
 
Los comandos jugando el rol de opción en el comando find Unix:
 
La opción o criterio -print es realidad un comando que lo pasamos al comando find para visualizar el contenido del resultado en la salida estándar, es decir la pantalla. Más de la opción -print tenemos a la opcion «-exec». La combinación del comando find con la opción -exec nos permite ejecutar un comando sobre los ficheros del resultado del comando find. 
 
La opción -exec tiene como argumento un comando y debe acabar con {} ;
 
Ejemplo 9, sobre el comando find opción -exec:
 
Buscar ficheros con el nombre «arch» que existen en el directorio corriente y borrarlos:
find . -name arch -exec rm {} ;
Buscar ficheros con el nombre «arch» que existen en el directorio corriente y antes de borrarlos pedir una confirmación:
find . -name arch -ok rm {} ;

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *