Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/types.h> //pentru diferite tipuri clock, time ,off_set
- #include <sys/stat.h> //pentru fisiere
- #include <unistd.h>
- #include <time.h>
- #include <dirent.h>
- #include <string.h>
- char buffer[1024];
- char txt[3]="txt";
- //functia creaza un fisier identic de la pathul aux in pathul text
- void copiere_txt(char* aux,char * temp){
- int file;
- int whcpy;
- if((file=open(aux,O_RDWR))<0){
- printf("Eroare la deschidere fisier");
- exit(3);
- }
- if((whcpy=open(temp,O_WRONLY | O_CREAT | O_TRUNC,S_IWUSR|S_IRUSR))<0){
- printf("Eroare la deschidere fisier");
- exit(4);
- }
- int rez;
- char c;
- while((rez=read(file,&c,sizeof(char)))>0)
- if(write(whcpy,&c,rez)<0)
- printf("Eroare la copiere");
- close(file);
- close(whcpy);
- }
- void copiere_dir(char* temp){
- mkdir(temp,S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
- }
- void func(int nr,char* args1,char* args2){
- char tab[20][20];
- int tab_counter=0;
- DIR* dir=NULL;
- struct dirent* box;
- if(nr<3){
- printf("Nu s-au introdus suficienti paramatri");
- exit(1);
- }
- if((dir=opendir(args1))==NULL){
- printf("Eroare la deschidere fisier");
- exit(2);
- }
- box=readdir(dir);
- while(box!=NULL){
- printf("%s\n",box->d_name);
- strcpy(tab[tab_counter++],box->d_name);
- box=readdir(dir);
- }
- int i;
- printf("\n\n");
- for(i=0;i<tab_counter;i++){
- if(tab[i][0]!='.'){
- char* ttxt=strstr(tab[i],txt);
- if(ttxt){
- //formam path-ul pentru fiecare fisier de tip text
- char* aux=(char*)malloc(sizeof(char)*100);
- char* temp=(char*)malloc(sizeof(char)*100);
- strcpy(aux,args1);
- strcpy(temp,args2);
- int m=strlen(aux);
- int n=strlen(temp);
- aux[m]='/';
- temp[n]='/';
- strcat(aux,tab[i]);
- strcat(temp,tab[i]);
- //printf("%s\n",temp); //afisare cale
- //deschidem fisierele
- copiere_txt(aux,temp);
- aux=NULL;
- temp=NULL;
- }
- else{
- char aux[3][100];
- strcpy(aux[1],args1);
- strcpy(aux[2],args2);
- int m=strlen(aux[1]);
- int n=strlen(aux[2]);
- aux[1][m]='/';
- aux[2][n]='/';
- strcat(aux[1],tab[i]);
- strcat(aux[2],tab[i]);
- //merge recursiv in fiecare director
- func(3,aux[1],aux[2]);
- copiere_dir(aux[2]);
- }
- }
- }
- }
- int main(int args,char** argv){
- func(args,argv[1],argv[2]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement