Comunidad Mundogeeks

Comando find Unix con 9 ejemplos detallados - Comandos Linux

Comando find Unix con ejemplos - Comandos Linux

Búsqueda de ficheros y directorios | Comando Find:

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 del comando find:

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 del comando find:

Ejemplo1, 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

Ejemplo2, 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.

Ejemplo3, 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

Ejemplo4, 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

 Ejemplo5, 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

 Ejemplo6, 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.

Ejemplo7, 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

Ejemplo8, 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 {}\ ;

Ejemplo9, 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 {}\ ;

4 comentarios: Leave Your Comments

  1. Muchas gracias Mundogeeks me ha servido muchísimo!
    Buena explicación y buenos ejemplos detallados sobe el comando find de Unix.

    ResponderEliminar
    Respuestas
    1. Hola Jesús bienvenido.
      Cualquier pregunta no dudes en preguntar ^_^

      Eliminar
  2. Hola, espero que estés bien amigo.
    Gracias por tus buenos aportes sobre Linux, en serio tu blog es uno de los mejores.
    Una cosa que quiero agregar es la utilización de comando grep que nos pueden remplazar algunos criterios de búsqueda con el comando find sobre el contenido de los archivos. Espero que tenga razón jeje

    ResponderEliminar
    Respuestas
    1. Hola Oscar, muchas gracias por tu comentario. No digo que mi blog es el mejor, pero si digo que intentamos escribir y enseñar algo de calidad sobre Linux. Y gracias por el aporte sobre el comando grep que lo podemos utilizar como argumento de la opción -exec.

      En fin, en este tutorial explico algunos ejemplos pero siempre podemos hacer las cosas de 1000 mameras. gracias!

      Eliminar