miércoles, 6 de febrero de 2013

Usos útiles del comando find

Listar cuales son directorios recursivamente:

# find . -type d
.
./CARPETA1
./CARPETA1/CARPETA-1a
./CARPETA2
./CARPETA2/CARPETA-2a
./CARPETA3
./CARPETA3/CARPETA-3a
./CARPETA4
./CARPETA4/CARPETA-4a


Listar archivos recursivamente:

# find . -type f
./CARPETA1/CARPETA-1a/archivo-1a
./CARPETA1/CARPETA-1a/archivo-2a
./CARPETA1/archivo1
./CARPETA1/archivo2
./CARPETA2/CARPETA-2a/archivo-1a
./CARPETA2/CARPETA-2a/archivo-2a
./CARPETA2/archivo1
./CARPETA2/archivo2
./CARPETA3/archivo1
./CARPETA3/archivo2
./CARPETA4/archivo1
./CARPETA4/archivo2


Listar archivos dentro de la ruta actual que tengan nombre archivo1: (recursivo)

# find . -name archivo1 -type f -exec ls {} \;
./CARPETA1/archivo1
./CARPETA2/archivo1
./CARPETA3/archivo1
./CARPETA4/archivo1


Borrar archivos dentro de la ruta actual que tengan nombre archivo2: (recursivo)

# find . -name archivo2 -type f -exec rm {} \;


Buscar archivos que en los últimos 5 días NO se modificaron:

# find /ruta -type f -mtime +5 -print


Buscar archivos que en los últimos 5 días se modificaron:

# find /ruta -type f ! -mtime +5 -print


Archivos modificados en las últimas 24 hs:

# find /home/ruta -mtime -1 -print


Borrar archivos mayores a 1Gb:

# find /home/users -size +1000000k -exec rm {} \;


Borrar archivos gz de cierta ruta mayores a 1Gb y modificamos hace más de 2 semanas:

# find /ruta/*gz -size +1000000k -mtime +14 -exec rm {} \;


Buscar archivos que tienen la cadena "PEPE" dentro y mostrar los archivos que la contienen:

# find . -type f -exec grep -l "PEPE" {} \; -exec rm {} \;


Buscar archivos que tienen la cadena "PEPE" dentro y mostrar las líneas:

# find . -type f -exec grep "PEPE" {} \;
PEPE es un pendorcho


Buscar archivos sin distinguir entre mayúsculas y minúsculas que contengan la cadena Pepito, PEPITO, PePiTo, etc y mostrar los archivos que contienen:

# find . -type f -exec grep -i "PePito" {} \;

Para buscar en el primer arbol de directorio usamos el parámetro -maxdepth en 0, si quisieramos utilizar el primer y segundo nivel ponemos 1 y así sucesivamente. En este ejemplo buscamos todos los directorios que hay en la ruta del sarg y filtramos por el año actual, el primer arbol de directorio, solo los directorios que no fueron modificados hace más de 30 días y los borramos:

# find /var/lib/sarg/Weekly/`date +%Y`* -maxdepth 0 -type d -mtime +30 -exec rm -r {} \;