En algunos casos mientras redactamos, codificamos o trabajamos en algunos editores de texto se van generando ficheros temporales que puede irse acumulando en nuestros directorios, estos suelen ser útiles en aquellos casos en los cuales las aplicaciones terminan de manera inesperada, seguramente podremos recuperar los últimos cambios hechos al utilizar este tipo de ficheros, o en el caso de los ficheros core, nos pueden servir en aquellos casos en los cuales alguna función de nuestros programas no funciona como debería y genera una violación de segmento, los ficheros core nos pueden facilitar el análisis en la búsqueda de los posibles errores en la función.
En muchas ocasiones nos encontramos que estos ficheros temporales se encuentran dispersos en algunos directorios y el hecho de borrarlos uno a uno suele ser un proceso más bien tedioso. Por la razón mencionada anteriormente podríamos hacernos la siguiente pregunta, ¿es posible automatizar el proceso de eliminación de ficheros “inútiles” de manera recursiva?, la respuesta es si.
El siguiente script nos ayudará servirá para lograr lo que deseamos.
#!/bin/bash
#Borrar de manera recursiva los ficheros inutiles.
echo Directorio Raiz: $PWD
echo Procesando...
find $PWD \( -name \*~ -or -name \*.o -or -name \*\# -or -name core \) -exec rm -vf {} \;
echo Listo!
En el código mostrado anteriormente el comando que realiza todo el trabajo por nosotros es find, voy a explicar brevemente que hace este comando.
El comando find necesita de un camino o ruta y de una expresión regular para lograr encontrar alguna coincidencia al recorrer el árbol de directorios cuya raíz es el camino especificado, find evaluará de izquierda a derecha las expresiones indicadas, tomando en cuenta las reglas de precedencia en los operadores, al conocer el resultado (cierto o falso) find continuará con el siguiente fichero.
Dentro del comando find encontrará el uso de ciertas opciones, entre las cuales cabe mencionar las siguientes:
-or
- Representa el o lógico, es equivalente a utilizar la opción
-o.
-exec
- Ejecuta la orden especificada siempre y cuando
find haya encontrado alguna concordancia con la expresión regular, por lo tanto se devuelve valor cierto. Las ordenes serán aquellos argumentos que siguen a -exec hasta que encontrar el carácter ; (punto y coma). Si desea ser consultado antes de realizar la ejecución al encontrarse alguna coincidencia, es preferible hacer uso de la opción -ok.
-name
- Especifica la base del nombre del fichero que deseamos buscar, no es necesario especificar el directorio, hace distincion entre mayúsculas y minúsculas. Se puede hacer uso de metacaracteres.
{}
- Cadena que es reemplazada por el nombre del fichero que se está procesando en ese instante.
Puede copiar el script mostrado arriba, supongamos que lo ha llamado rmnull, debe moverlo dentro del directorio /usr/local/bin/ (haciéndolo como superusuario). Posteriormente debe otorgarle permisos de ejecución.
$ sudo mv rmnull /usr/local/bin/
chmod +x /usr/local/bin/rmnull
Ahora bien, para hacer uso del script simplemente deberá teclear en consola rmnull, el directorio raíz será el directorio en el que se encuentre actualmente. Veamos un ejemplo de ejecución del script.
milton@omega:~$ touch file# file.o file~ pruebas/file# pruebas/file~ pruebas/core
milton@omega:~$ pwd
/home/milton
milton@omega:~$ rmnull
Directorio Raiz: /home/milton
Procesando...
«/home/milton/Desktop/find.txt~» borrado
«/home/milton/pruebas/file#» borrado
«/home/milton/pruebas/file~» borrado
«/home/milton/pruebas/core» borrado
«/home/milton/file#» borrado
«/home/milton/file.o» borrado
«/home/milton/file~» borrado
Listo!
En el ejemplo de ejecución hago uso del comando touch para crear los ficheros especificados (en caso de no existir), estos archivos en principio se encuentran vacíos y con permisos de lectura y escritura para el dueño del fichero, grupo al pertenece el dueño y demás usuarios. Posteriormente hago uso del comando pwd para conocer mi ubicación actual, a continuación “invoco” al script rmnull quien hará el trabajo de limpieza de manera automatizada.