Compactando arquivos de log *.txt

Publicado por saymon castro de souza 12/06/2008

[ Hits: 7.984 ]

Download compacta_new.c




Algoritmo que pode ser colocado no cron para a compactação dos arquivos *.txt existentes em um diretório.

É muito interessante para a compactação de logs de banco de dados.

  



Esconder código-fonte

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*

Este programa compacta todos arquivos txt existentes em um determinado diretorio

*/

int main(int argc, char **argv[]){
        FILE *fp;
        char arquivo_temp[60], comando[80],arquivo_tar[60],arquivo[60];
        if (strcmp(argv[1],"--h") == 0){
                printf("##########################\n\n");
                puts("Programa para compactar arquivos txt...");
                printf("\n");
                puts("Sintaxe: ");
                printf("\n");
                puts("  #./compacta <DIRETORIO>");
                printf("\n\n");
                puts("Exemplo:");
                printf("\n");
                puts("#./compacta /tmp");
                printf("\n");
                puts("**compacta todos arquivos txt existentes em /tmp");
                printf("\n#########################\n");
                exit(0);
        }
        int i;

        char lista[80]="ls ";
        strcat(lista,argv[1]);
        strcat(lista,"/*.txt");
        strcat(lista," > lista");
        system(lista);
        fp = fopen("lista","r");
        while(!feof(fp)){
                /*fgets(string,60,fp)*/

                fscanf(fp,"%s",arquivo_temp);
                for(i=0;i<strlen(arquivo_temp)-4;i++)
                        strcat(arquivo[i],arquivo[i];

                printf("\n\n%s\n\n",arquivo);


                /*criando o pacote tar*/

                /*comando = 'tar -cf' arquivo_tar  arquivo */

                strcpy(comando,"tar -cf ");
                strcpy(arquivo_tar,arquivo);
                strcat(arquivo_tar,".tar");
                strcat(comando,arquivo_tar);
                strcat(comando," ");
                strcat(comando,arquivo);
                system(comando);

                strcpy(comando,"");

                /*criando o pacote bz2*/
                strcpy(comando,"bzip2 -z ");
                strcat(comando,arquivo_tar);
                system(comando);
        }
                system("rm *.txt -rf");
                system("rm *.tar -rf");
        fclose(fp);
}

Scripts recomendados

MyBank

Função readConf. Ler arquivos de configuração.

Exemplo de manipulação de arquivos

Agenda (fones, compromissos, aniversários) em C usando arquivos binários

Editar o arquivo /etc/rc.d/rc.local


  

Comentários
[1] Comentário enviado por removido em 12/06/2008 - 13:27h

Otimo Codigo amigo!

mas vc poderia verificar se argv[1] realmente existe,isso evita um BOF.

e poderia usar sprintf para montar a string(lista).

Parabéns pelo codigo!

ta legal

[2] Comentário enviado por biriba_di em 17/11/2011 - 08:14h

bom dia pessoal, fiquei muito interessado nesse codigo.
Porém quando eu tento compilar ele no GCC ele ta dando o seguinte erro:
14 C:\Users\limadie\Documents\LpI\C++\compacta.cpp cannot convert `char**' to `const char*' for argument `1' to `int strcmp(const char*, const char*)'
33 C:\Users\limadie\Documents\LpI\C++\compacta.cpp cannot convert `char**' to `const char*' for argument `2' to `char* strcat(char*, const char*)'
43 C:\Users\limadie\Documents\LpI\C++\compacta.cpp invalid conversion from `char' to `char*'
43 C:\Users\limadie\Documents\LpI\C++\compacta.cpp initializing argument 1 of `char* strcat(char*, const char*)'
43 C:\Users\limadie\Documents\LpI\C++\compacta.cpp invalid conversion from `char' to `const char*'
43 C:\Users\limadie\Documents\LpI\C++\compacta.cpp initializing argument 2 of `char* strcat(char*, const char*)'

To quebrando a cabeça aqui, mas mexo em uma coisa, da erro em outra.. se conseguirem localizar o erro e me sinalizar!

Obrigado!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts