Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

biriba_di

Programa que Compacta a Extenção Escolhida pelo User[linux]

Recommended Posts

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:

#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);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Faça o seguinte:

 

/* Pegue a extensão que quer que está em argv */

strcpy(comando, "tar -cf *.");
strcat(comando, extensao_do_arquivo);

 

Isso vai compactar todos os arquivos com aquela extensão em tal diretório. Mas lembre-se que o programa tem que estar em tal diretório para fazer isso.

 

 

 

Olha se funciona.

 

 

Abraços :D

 

 

@edit:

 

Quando eu digo extensão, eu digo só "tar" ou "txt", não ".txt" ou ".sh".

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.