Publica tu how-to

Dinos como hacer lo que sabes hacer, mándanos un email a wdonet@gmail.com y lo publicamos (dos días máximo) o si te interesa unirte al equipo de redactores, también háznoslo saber por correo.

Usos de comando find en linux

Para ejecutar el comando find, debes conocer lo siguiente:
  • Por defecto, el comando find, busca en la ruta actual y todos sus subdirectorios. No obstante se pueden modificar estas características y otras más según la tabla abajo descrita.
  • Se pueden encadenar los resultados de find con pipe '|' para manipular los resultados. Ejemplo, mostrar los 3 archivos mas grandes del sistema
    • find / -type f -exec ls -s {} \; | grep sort -n -r | head 3
  • Cada archivo, carpeta, enlace simbólico o duro, etc., es guardado en el sistema de archivos con un numero irrepetible conocido como 'inode', de esta manera podemos tener dos o mas archivos con nombres similares pero inodes distintos.
Ejemplo: "archivo1.txt", "archivo1 .txt" y "archivo1.txt " [Noten los espacios]. No obstante, al mostrarlos como 'ls -i1 archivo*' se mostraría algo como esto:
16187429 archivo1.txt
16187430 archivo1 .txt
16187431 archivo1.txt


Buscar por nombre.
find -name "nombreArchivo.txt"
Buscar por nombre ignorando mayúsculas/minúsculas.
find -iname "nombreArchivo.txt"
Buscar archivos que no empaten con el criterio de búsqueda
find / -not -name "nombreArchivo.txt"
Buscar solo en la ruta raíz (nivel 1) y sus subdirectorios directos (nivel 2).
find / -maxdepth 2 -name "archivo.txt"
Buscar solo en la ruta raíz (nivel 1), en los subdirectorios directos (nivel 2) y en las carpetas dentro de los subdirectorios directos (nivel 3) sin incluir más niveles.
find / -maxdepth 3 -name "archivo.txt"
Buscar solo entre los subdirectorios directos de raíz (nivel 2) y las carpetas de estos (nivel 3), sin incluir mas niveles.
find / -mindepth 2 -maxdepth3 -name archivo.txt
Ejecutar un comando sobre cada resultado de la búsqueda. Cada parámetro después de '-exec' se considera como parámetro para el comando hasta encontrar el parámetro '\;'. Se sustituye '{}' por el archivo actual de los resultados de find. El comando se ejecuta desde el directorio que se ejecuto find.
En este ejemplo, eliminar cada archivo encontrado en la búsqueda
find -name "archivo.txt" -exec rm {} \;
Buscar por numero inode
find -inum 16187429
Buscar con base a los permisos en forma simbólica: Todos los archivos con únicamente permiso de lectura para el grupo. Se puede usar u (user), g (grupo), o (otros). Para este ejemplo traería
----r----- archivoSoloLecturaGrupo.txt
find . -perm g=r
Buscar con base a los permisos en forma simbólica: Cualquier archivo que tenga permiso de lectura para el grupo. Para este ejemplo traería
----r----- archivoSoloLecturaGrupo.txt
----rw---- archivoLecturaEscrituraGrupo.txt
-rw-rw-rw- archivoLecturaEscrituraTodos.txt

find . -perm -g=r (nota el guion antes de la g)
Buscar con base a los permisos de forma octal. En este caso, los dueños puedan hacer todo, y el resto (grupo y otros) puedan solo leer y ejecutar
find . -perm 755
Buscar todos los archivos que tengan la palabra 'test' en minúsculas y estén vacíos
find / -maxdepth 1 -empty -name "*test*"
Buscar un enlace simbólico llamado java o cualquiera que tenga "virtual" sin importar mayúsculas ni minúsculas
find / -lname "java"
find / -ilname "virtual"
Buscar todos los archivos que empate su ruta con el criterio. Para este caso traería como resultados los archivos de estas rutas:
./src/misc
./src/metal/misc
./sroot/tormenta/pasc
find / -path "./sr*sc"
Buscar todos los archivos que empaten con la ruta sin importar mayúsculas/minúsculas. Por ejemplo:
/proyecto40/moduloCore/target
/proyecto40/moduloDao/target
/proyecto40/pruebas/target
/ProfesionalPrint/inkJET
find / -path "pro*et"
Buscar por tipo de archivo, los cuales pueden ser:
b - bloque special (buffered)
c - carácter especial (unbuffered)
d - directorio
p - named pipe
f - archivo normal
l - enlace simbólico
s - socket
D - door (solo en Solaris)

find -type f
Buscar por que empate el criterio con una expresión regular. En este caso archivos que empiecen con 'sr', 'sT', 'Sr' o 'ST'.
find -regex "[sS][rT]*"
Si queremos buscar los archivos creados después de cierta fecha, por ejemplo la fecha de creación de cierto archivoReferencia.txt.
find -newer archivoReferencia.txt
Encontrar archivos por tamaño. Menores a 30MB, mayores a 15GB, que sean exactamente de 7KB. Las opciones son: b (bloques y es por defecto si no se especifica), c (bytes), w (words o 2bytes), k (kilobytes), M (megabtes), G (gigabytes)
find -size -30M
find -size +15G
find -size 7k

Existen muchas mas opciones para configurar el comando que las puedes obtener directamente con '# man find' o puedes guiarte por:
linux.about.com
www.grymoire.com

1 comentario:

  1. me ha sido muy util una de las opciones marcadas en la tabla. muchas gracias

    ResponderEliminar

Que opinas sobre esta publicación?