biriba_di 0 Denunciar post Postado Novembro 25, 2011 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
Renato Utsch 24 Denunciar post Postado Novembro 26, 2011 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