-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbz2.c
71 lines (66 loc) · 1.98 KB
/
bz2.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <stdio.h>
#include <string.h>
#include <sys/dir.h>
#include <unistd.h>
#define PATH_MAX 4096
char DIRECTORIES[1000000][200];
long long int DIR_POS = 0;
char DIRECTORY_NAME[200];
FILE *terminal;
void find_files(char *dirname){
DIR *dir;
struct dirent *dirp;
dir=opendir(dirname);
chdir(dirname);
while((dirp=readdir(dir))!=NULL){
if(dirp->d_type==4){
if(strcmp(dirp->d_name, ".")==0 || strcmp(dirp->d_name, "..")==0){
continue;
}
//printf("%s %s\n", "FOLDER", dirp->d_name);
find_files(dirp->d_name);
}
else{
char zip[255] = "bzip2 ";
strcat(zip, dirp->d_name);
//printf("%s\n", zip);
char path[PATH_MAX];
terminal = popen(zip, "r");
while(fgets(path, PATH_MAX, terminal) != NULL);
//printf("%s %s\n", "FILE", dirp->d_name);
}
strcpy(DIRECTORIES[DIR_POS], dirp->d_name);
DIR_POS++;
}
chdir("..");
closedir(dir);
}
int main( int argc, char *argv[ ]){
strcpy(DIRECTORY_NAME, argv[1]);
char cp[255] = "cp -ax ";
char destino_dir_name[255];
strcat(cp, DIRECTORY_NAME);
strcat(destino_dir_name, DIRECTORY_NAME);
strcat(destino_dir_name, ".bz2");
strcat(cp, " ");
strcat(cp, destino_dir_name);
terminal = popen(cp, "r");
char path[PATH_MAX];
while(fgets(path, PATH_MAX, terminal) != NULL);
find_files(destino_dir_name);
char tar[255] = "tar cf ";
char destino_tar_name[255];
strcpy(destino_tar_name, DIRECTORY_NAME);
strcat(destino_tar_name, ".bz2.tar");
strcat(tar, destino_tar_name);
strcat(tar, " ");
strcat(tar, destino_dir_name);
//printf("%s\n", tar);
terminal = popen(tar, "r");
while(fgets(path, PATH_MAX, terminal) != NULL);
char rm[255] = "rm -r ";
strcat(rm, destino_dir_name);
terminal = popen(rm, "r");
while(fgets(path, PATH_MAX, terminal) != NULL);
return 0;
}