Fórum Ubuntu Linux - PT
21 de Maio de 2013, 17:53 *
Olá, Visitante. Faça o login ou registre-se.
Perdeu o seu e-mail de ativação?

Login com nome de usuário, senha e duração da sessão
Notícias: Atualização no plugin de busca para Firefox e Internet Explorer.
 
   Home   Ajuda Regras Pesquisa Login Registre-se  
Anúncios
Páginas: [1]   Ir para o fundo
  Imprimir  
Autor Tópico: Programa que Compacta a Extenção Escolhida pelo User  (Lida 597 vezes)
biriba_di
Usuário Ubuntu
*
Deslogado Deslogado

Mensagens: 7


Ver Perfil
« em: 25 de Novembro de 2011, 13:52 »

Boa tarde pessoal, criei um programa que compacta a extenção escolhida pelo usuario, exemplo:
./compacta /home/Downloads txt
esse comando vai pegar todos o arquivos com extenção txt e compacta-los.
Eis que surge minha duvida, quando ele compacta, se tiver 3 arquivos txt, ele compacata 1 por 1 separados, e nao os 3 em 1 só.
Precisava da ajuda de vcs para saber como compactar todos arquivos em apenas 1.
Segue o codigo:

Código:
#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];
void printUsage()
{
    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");
}

if (argc < 3)
{
    printUsage();
    return 0;
}
if (strcmp(argv[1],"--h") == 0)
{
    printUsage();
    return 0;
}
if (strcmp(argv[2],"--h") == 0)
{
    printUsage();
    return 0;
}
        int i;
 
        char lista[100]="ls ";
        strcat(lista,argv[1]);
        strcat(lista,"/*.");
strcat(lista,argv[2]);
        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,arquivo_temp);
 
                printf("\n\n%s\n\n",arquivo_temp);
 
 
                /*criando o pacote tar*/
 
                /*comando = 'tar -cf' arquivo_tar  arquivo */
 
                strcpy(comando,"tar -cf ");
                strcpy(arquivo_tar,arquivo_temp);
                strcat(arquivo_tar,".tar");
                strcat(comando,arquivo_tar);
                strcat(comando," ");
                strcat(comando,arquivo_temp);
                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);
}
Registrado
irtigor
Equipe Ubuntu
Usuário Ubuntu
*****
Deslogado Deslogado

Mensagens: 3.212


Delete, delete, delete!


Ver Perfil
« Responder #1 em: 25 de Novembro de 2011, 18:16 »

Você cria uma lista com um item por linha, depois no laço lê linha por linha e compacta... se vai chamar o tar, passe um glob:
tar cjf compactado.tar.bz2 /tmp/*.txt
Registrado
Páginas: [1]   Ir para o topo
  Imprimir  
 
Ir para:  

Powered by MySQL Powered by PHP Tema desenvolvido por FaBMak e n3t0
Powered by SMF 1.1.18 | SMF © 2006-2009, Simple Machines
© 2013 Canonical Ltd. Ubuntu e Canonical são marcas registradas da Canonical Ltd.
XHTML 1.0 válido! CSS válido!