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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
| #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NB 100
typedef struct ligne
{ //on définit le tableau
char colonne1[NB];
char colonne2[NB];
char colonne3[NB];
char colonne4[NB];
char colonne5[NB];
char colonne6[NB];
char colonne7[NB];
char colonne8[NB];
} ligne;
typedef struct tm
{
char t[NB];
} tm;
int main ()
{ //définition des valeurs
int i=0;
int j;
int k;
int nbc;
char nom_rep1[NB]; //nom du repertoire pere du fichier 1
char nom_rep2[NB]; //nom du repertoire pere du fichier 2
char chemin_rep1[NB]; //chemin d'accès répertoire 1
char chemin_rep2[NB]; //chemin d'accès répertoire 2
char nom_fich[NB]; //nom du fichier à supprimer
char date_rep1[NB]; //date de derniere modif repertoire 1
char date_rep2[NB]; //date de derniere modif repertoire 2
char chemin_sup[NB];
int n; //nombre de lignes de liste.txt qu'on va trouver grace a wc -l
//end définition des valeurs
//recuperation de n
FILE * nfile;
char ntext[NB];
nfile = fopen("n.txt","r"); //ouverture du fichier contenant le nombre de lignes
fgets(ntext,NB - 1,nfile); // |
n = atoi(ntext); // | récupération de la valeur de n
printf("%d\n", n); //test de la récupération de n
// end recuperation
tm tmp[7];
ligne *ptableau = malloc(sizeof *ptableau *n);
char *chaine = malloc(sizeof *chaine);
char *tab = malloc(sizeof *tab);
char *tampon = malloc(sizeof *tampon);
char *tmpnom = malloc(sizeof *tmpnom);
char *tmpche = malloc(sizeof *tmpche);
char *tmpd1 = malloc(sizeof *tmpd1); //temporaire de la date1
tmpd1=""; //initialise la date1
char annee1[NB];
char mois1[NB];
char jour1[NB];
char *tmpd2 = malloc(sizeof *tmpd2); //temporaire de la date2
tmpd2=""; //initialise la date2
char annee2[NB];
char mois2[NB];
char jour2[NB];
//définition du script suppression
FILE * suppression = NULL;
suppression = fopen("suppression.txt", "w");
if (suppression != NULL)
{
fprintf(suppression,"#!/bin/csh \n");
fclose(suppression);
}
//end définition du script suppression
FILE * moulinette = NULL;
moulinette = fopen("listebis.txt","r");
i=-1;
while ( ! feof (moulinette) )
{
fgets(chaine,NB,moulinette); // on met ligne par ligne le resultat de ls -alR dans "chaine"
tab=strtok(chaine," \n"); //on recupere chaque chaine de charactere de "chaine"
if(tab==NULL) //si il n'y a aucune chaine de charactere a recuperer, on ne prend rien
continue;
if(strcmp(tab,"total")==0) //si le premier charactere est total on ne prend pas non plus
continue;
i++;
j=0;
while (tab != NULL) // tant que le tab n'est pas vide, on continue a prendre des valeurs
{
strcpy(tmp[j].t,tab); //on met chaque valeur de tab dans une variable tampon tmp[j] de 0 a 7
j++;
tab = strtok (NULL," \n"); //on reinitialise tab
}
if (strlen(tmp[0].t)>strcspn(tmp[0].t,":")) //sctrcspn compte le nombre characteres moins le ":", strlen compte le nombre de characteres => si c un dossier, il se finit par ":", donc on rentre dans cette boucle
{
tampon = strtok(tmp[0].t,":"); //on met le nom de dossier sans ":" dans une variable tampon
strcpy(ptableau[i].colonne1,tampon); //on met cette variable tampon dans la ligne concernée colonne 1
strcpy(ptableau[i].colonne3,"dossier"); //on indique que cette ligne concerne un dossier
}
else
{
strcpy(ptableau[i].colonne1,tmp[0].t); //droits d'execution, lecture
strcpy(ptableau[i].colonne2,tmp[1].t);
strcpy(ptableau[i].colonne3,tmp[2].t); //dossier utilisateur
strcpy(ptableau[i].colonne4,tmp[3].t); //dossier parent
strcpy(ptableau[i].colonne5,tmp[4].t); //poids
strcpy(ptableau[i].colonne6,tmp[5].t); //date de derniere modif
strcpy(ptableau[i].colonne7,tmp[6].t); //heure de derniere modif
strcpy(ptableau[i].colonne8,tmp[7].t); //nom du fichier, dossier
}
}
free (chaine), chaine = NULL; //
free (tab), tab = NULL; //libération de la mémoire
free (tampon), tampon = NULL; //
fclose (moulinette);
nbc=i; //nombre de lignes du tableau après avoir oté les blancs et les lignes poids total du dossier
printf("%d",nbc); //test nombre de lignes tableau
for (i=0;i<nbc;i++)
{
// test du tableau
printf("%s %s %s %s %s %s %s %s\n",
ptableau[i].colonne1,
ptableau[i].colonne2,
ptableau[i].colonne3,
ptableau[i].colonne4,
ptableau[i].colonne5,
ptableau[i].colonne6,
ptableau[i].colonne7,
ptableau[i].colonne8);
// end test
if (strcmp(ptableau[i].colonne3,"dossier") == 0) //vérification si la ligne concernce un dossier ou un fichier
{
strcpy(tmpche,ptableau[i].colonne1);
tmpnom=strtok(tmpche,"/");
while (tmpnom!=NULL)
{
strcpy(ptableau[i].colonne2,tmpnom);
tmpnom=strtok(NULL,"/");
}
strcpy(chemin_rep1,ptableau[i].colonne1);
strcpy(nom_rep1,ptableau[i].colonne2);
}
else
{
for (j=i+1;j<nbc;j++)
{
if (strcmp(ptableau[j].colonne3,"dossier") == 0) //vérification si la ligne concernce un dossier ou un fichier
{
strcpy(tmpche,ptableau[j].colonne1);
tmpnom=strtok(tmpche,"/");
while (tmpnom!=NULL)
{
strcpy(ptableau[j].colonne2,tmpnom);
tmpnom=strtok(NULL,"/");
}
strcpy(chemin_rep2,ptableau[j].colonne1);
strcpy(nom_rep2,ptableau[j].colonne2);
}
else if (((strcmp(ptableau[i].colonne6,ptableau[j].colonne6)) == 0) && //même date
((strcmp(ptableau[i].colonne8,ptableau[j].colonne8)) == 0) && //même nom
((strcmp(ptableau[i].colonne8,".")) != 0) && //évite les répertoires courants
((strcmp(ptableau[i].colonne8,"..") != 0))) //évite les répertoires pères
{
strcpy(nom_fich,ptableau[i].colonne8); //récuperation nom fichier à supprimer
for (k=0;k<nbc;k++)
{
if ((strcmp(ptableau[k].colonne8,nom_rep1)) == 0)
{
strcpy(date_rep1,ptableau[k].colonne6);
}
else if ((strcmp(ptableau[k].colonne8,nom_rep2)) == 0)
{
strcpy(date_rep2,ptableau[k].colonne6);
}
}
printf("chemin1 %s\n",chemin_rep1); //test chemin_rep1
printf("nom1 %s\n",nom_rep1); //test nom_rep1
printf("chemin2 %s\n",chemin_rep2); //test chemin_rep2
printf("nom2 %s\n",nom_rep2); //test nom_rep2
printf("fichier %s \n",nom_fich); //test nom fichier
printf("date1 %s \n",date_rep1); //test date 1
printf("date2 %s \n",date_rep2); //test date 2
////probleme!!
tmpd1 = strtok(date_rep1,"-"); //pour retirer les -
strcpy(annee1,tmpd1); // rajoute tmpd1 dans annee1
tmpd1 = strtok (NULL,"-"); // passe à la sous-chaine suivante à chaque "-"
strcat(mois1,tmpd1);
tmpd1 = strtok (NULL,"-");
strcat(jour1,tmpd1);
printf("date1 %s %s %s\n",jour1,mois1,annee1); //test date1
tmpd2 = strtok(date_rep2,"-"); //pour retirer les -
strcat(annee2,tmpd2); // rajoute tmpd2 dans anneE2
tmpd2 = strtok (NULL,"-"); // passe à la sous-chaine suivante à chaque "-"
strcat(mois2,tmpd2);
tmpd2 = strtok (NULL,"-");
strcat(jour2,tmpd2);
printf("date2 %s %s %s\n",jour2,mois2,annee2); //test date2
////probleme!!
if ((strcmp(annee1,annee2)) >= 0)
{
strcpy(chemin_sup,chemin_rep1);
}
else if ((strcmp(annee1,annee2)) <= 0)
{
strcpy(chemin_sup,chemin_rep2);
}
else
{
if ((strcmp(mois1,mois2)) >= 0)
{
strcpy(chemin_sup,chemin_rep1);
}
else if ((strcmp(mois1,mois2)) <= 0)
{
strcpy(chemin_sup,chemin_rep2);
}
else
{
if ((strcmp(jour1,jour2)) >= 0)
{
strcpy(chemin_sup,chemin_rep1);
}
else if ((strcmp(jour1,jour2)) <= 0)
{
strcpy(chemin_sup,chemin_rep2);
}
}
}
// suppression ne prenant pas en compte la date de modif de dossier pere
suppression = fopen("suppression.txt", "a");
if (suppression != NULL)
{
fprintf(suppression,"rm -f %s/%s; \n",chemin_rep1,nom_fich);
fclose(suppression);
}
//end suppression
// suppression prenant en compte la date de modif de dossier pere
/*// phase de remplissage du script suppression
suppression = fopen("suppression.txt", "a");
if (suppression != NULL)
{
fprintf(suppression,"rm -f %s/%s; \n",chemin_sup,nom_fich);
fclose(suppression);
}*/
//end suppression
}
}
}
}
free (tmpche), tmpche = NULL;
free (tmpnom), tmpnom = NULL; //libération de la mémoire
free (ptableau), ptableau = NULL;
return 0;
} |
Partager