En ciertas ocasiones se requiere hacer que se disminuya el tamaño de un archivo, eventualmente a tamaño cero, sin importar los contenidos del mismo, por ejemplo con archivos de logs, por una parte se puede hacer manualmente desde el shell o con un programa con una función en C para este efecto.
Manualmente con el shell
Por ejemplo un archivo como :
-rw-r----- 1 proxy proxy 97522632 2007-05-24 07:31 log/squid/store.log
Se podría eliminar con:
rm store.log ; touch store.log ; chown proxy:proxy store.log ; chmod 640 store.log
En la línea anterior, se eliminó el archivo se creó uno nuevo de tamaño cero, se restauró el propietario y se dieron los permisos originales, para cada archivo se deduciría el usuario y los permisos correspondientes.
Programa para truncar
A continuación un listado de un programa en C que facilita esta tarea con ayuda de la función truncate:
#include <sys/stat.h>
int main(int argc, char * argv[])
{
struct stat info;
int err=0;
if(argc<2)
{
printf("Hace que el tamaño de un archivo se vuelva 0.\n Uso: trunca [archivo]\n");
exit(1);
}
if (stat(argv[1], &info))
{
printf("Problemas al leer %s\n", argv[1]);
exit(1);
}
if ((err=truncate (argv[1], 0))!=0)
{
printf("Error al truncar %s\n", argv[1]);
}
return err;
}CategoriaAyudaInterfazDeComandos CategoriaAdministradorDeRed

