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
|
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NB 100
#define NB2 200
typedef struct
/* 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
{
char t[NB];
}
tm;
/* définition des valeurs */
int main (void)
{
char *chaine = malloc (NB * sizeof *chaine);
if (chaine != NULL)
{
/* nombre de lignes de liste.txt qu'on va trouver grace a wc -l */
int n = 195;
ligne *ptableau = malloc (n * sizeof *ptableau);
if (ptableau != NULL)
{
FILE *moulinette = fopen ("listebis.txt", "r");
if (moulinette != NULL)
{
char *avoile = malloc (NB * sizeof *avoile);
if (avoile != NULL)
{
int i = -1;
/* on met ligne par ligne le resultat de ls -alR dans "chaine" */
while (fgets (chaine, NB, moulinette) != NULL)
{
tm tmp[7];
/* on recupere chaque chaine de charactere de "chaine" */
char *tab = strtok (chaine, " \n");
/* si il n'y a aucune chaine de charactere a recuperer, on ne prend rien */
if (tab == NULL)
continue;
/* si le premier charactere est total on ne prend pas non plus */
if (strcmp (tab, "total") == 0)
continue;
i++;
{
int j = 0;
/* tant que le tab n'est pas vide, on continue a prendre des valeurs */
while (tab != NULL)
{
/* on met chaque valeur de tab dans une variable tampon tmp[j] de 0 a 7 */
strcpy (tmp[j].t, tab);
j++;
/* on reinitialise tab */
tab = strtok (NULL, " \n");
}
}
/* 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 */
if (strlen (tmp[0].t) > strcspn (tmp[0].t, ":"))
{
/* on met le nom de dossier sans ":" dans une variable tampon */
avoile = strtok (tmp[0].t, ":");
/* on met cette variable tampon dans la ligne concernée colonne 1 */
strcpy (ptableau[i].colonne1, avoile);
}
else
{
/* droits d'execution, lecture */
strcpy (ptableau[i].colonne1, tmp[0].t);
strcpy (ptableau[i].colonne2, tmp[1].t);
/* dossier utilisateur */
strcpy (ptableau[i].colonne3, tmp[2].t);
/* dossier parent */
strcpy (ptableau[i].colonne4, tmp[3].t);
/* poids */
strcpy (ptableau[i].colonne5, tmp[4].t);
/* date de derniere modif */
strcpy (ptableau[i].colonne6, tmp[5].t);
/* heure de derniere modif */
strcpy (ptableau[i].colonne7, tmp[6].t);
/* nom du fichier, dossier */
strcpy (ptableau[i].colonne8, tmp[7].t);
}
}
/* nombre de lignes du tableau après avoir oté les blancs et les lignes poids total du dossier */
{
/* nom du premier repertoire pere */
char nom_rep1[NB];
/* nom du deuxieme repertoire pere */
char nom_rep2[NB];
/* nom du fichier à supprimer */
char nom_fich[NB];
int nbc = i;
/* test nombre de lignes tableau */
printf ("%d", nbc);
for (i = 0; i < nbc; i++)
{
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);
if (ptableau[i].colonne8 == NULL)
{
strcpy (nom_rep1, ptableau[i].colonne1);
printf ("%s \n", nom_rep1);
}
else
{
int j;
for (j = i + 1; j < n; j++)
{
if (ptableau[j].colonne8 == NULL)
{
strcpy (nom_rep2, ptableau[j].colonne1);
printf ("%s", nom_rep2);
}
else
if ((ptableau[i].colonne8 ==
ptableau[j].colonne8)
&& (ptableau[i].colonne6 ==
ptableau[j].colonne6))
{
strcpy (nom_fich, ptableau[i].colonne8);
printf ("%s", nom_fich);
/*
on a les deux noms de repertoire rep1 rep2
recherche rep1
scanf de la colonne date du rep1
recherche rep2
scanf de la colonne date du rep2
petit prog de olivier pour changer les heures lettre en heures chiffres
petit prog de olivier pour tester le dossier le plus recent
NE PAS OUBLIER LE NOM DU DOSSIER LE PLUS RECENT (creation de nouvelle valeur rep_sup)
modifier les quelques lignes en dessous pour suppression du rep1 ou du rep2
*/
{
FILE *suppression =
fopen ("supression.txt", "rw");
if (suppression != NULL)
{
fprintf (suppression, "#!/bin/csh \n");
fprintf (suppression,
"rm -i %s/%s; \n", nom_rep1,
nom_fich);
fclose (suppression), suppression = NULL;
}
}
}
}
}
}
}
free (avoile), avoile = NULL;
}
fclose (moulinette), moulinette = NULL;
}
free (ptableau), ptableau = NULL;
}
free (chaine), chaine = NULL;
}
return 0;
} |
Partager