Suppression de fichiers automatique dans GDrive
Bonjour,
j’ai des fichiers dans un drive qui sont chargés toutes les 30 min et je cherche à ne garder que le dernier chargé par championnat (soit 6 fichiers)
- nextmatches_England_Premier-League
- nextmatches_France_Ligue-1
- nextmatches_Germany_Bundesliga
- nextmatches_Italy_Serie-A
- nextmatches_Netherlands_Eredivisie
- nextmatches_Spain_Laliga
mon AppScript Json est :
{
"timeZone": "Europe/Paris",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/script.external_request"
]
}Pourtant mon script suivant ne fonctionne pas
function nettoyerDossier() {
// Remplacer par l'ID de votre dossier si nécessaire
var dossierId = '1rVzAYPD_vckOomAGXU7DvykCmgbCzIoe';
// Liste des modèles de nom de fichier à conserver
var modelesNoms = [
'nextmatches_England_Premier-League',
'nextmatches_France_Ligue-1',
'nextmatches_Germany_Bundesliga',
'nextmatches_Italy_Serie-A',
'nextmatches_Netherlands_Eredivisie',
'nextmatches_Spain_Laliga'
];
// Obtenir tous les fichiers du dossier
var fichiers = DriveApp.getFolderById(dossierId).getFiles();
// Dictionnaire pour stocker le fichier le plus récent pour chaque modèle
var fichiersAConserver = {};
// Initialiser par défaut les valeurs du dictionnaire pour chaque modèle
modelesNoms.forEach(function(modele) {
fichiersAConserver[modele] = null;
});
// Parcourir tous les fichiers du dossier
while (fichiers.hasNext()) {
var fichier = fichiers.next();
var nomFichier = fichier.getName();
// Vérifier si le nom du fichier **contient** un modèle
for (var i = 0; i < modelesNoms.length; i++) {
if (nomFichier.indexOf(modelesNoms[i]) >= 0 && fichier.getMimeType() == MimeType.CSV) {
// Si un fichier plus récent existe déjà pour ce modèle, comparer les dates
if (fichiersAConserver[modelesNoms[i]] &&
fichiersAConserver[modelesNoms[i]].getLastUpdated().getTime() > fichier.getLastUpdated().getTime()) {
continue; // Ne rien faire si on a déjà un fichier plus récent
}
// Sinon, mettre à jour le fichier à conserver
fichiersAConserver[modelesNoms[i]] = fichier;
}
}
}
// Obtenir à nouveau tous les fichiers pour comparer avec ceux à conserver
fichiers = DriveApp.getFolderById(dossierId).getFiles();
// Parcourir à nouveau les fichiers pour les supprimer s'ils ne sont pas à conserver
while (fichiers.hasNext()) {
var fichier = fichiers.next();
var nomFichier = fichier.getName();
var fichierAConserver = false;
// Vérifier si le fichier fait partie des fichiers à conserver
for (var i = 0; i < modelesNoms.length; i++) {
if (nomFichier.indexOf(modelesNoms[i]) >= 0 && fichiersAConserver[modelesNoms[i]] && fichiersAConserver[modelesNoms[i]].getId() == fichier.getId()) {
fichierAConserver = true;
break;
}
}
// Si le fichier ne doit pas être conservé, le mettre à la corbeille
if (!fichierAConserver) {
Logger.log('Suppression du fichier : ' + fichier.getName());
fichier.setTrashed(true);
}
}
}J'ai ce message d'erreur et rien ne passe :
21:02:39 Avis Exécution démarrée
21:02:41 Infos Suppression du fichier : 20240904_nextmatches_Netherlands_Eredivisie_2024-2025_115935.csv
21:02:41 Erreur
Exception: Access denied: DriveApp.
nettoyerDossier @ Cleaning_DossierDrive.gs:66
Quelqu'un a une idée ?
Merci pour votre aide !
Seb
Bonjour,
Tu as bien les droits sur le dossier où les fichiers sont à supprimer ?
Si oui, modifie ceci :
// Si le fichier ne doit pas être conservé, le mettre à la corbeille
if (!fichierAConserver) {
Logger.log('Suppression du fichier : ' + fichier.getName());
fichier.setTrashed(true);
}En ceci, afin d'afficher l'erreur :
// Si le fichier ne doit pas être conservé, le mettre à la corbeille
if (!fichierAConserver) {
try{
Logger.log('Suppression du fichier : ' + fichier.getName());
fichier.setTrashed(true);
}catch(e){
console.error('erreur : '+e.message);
}ça semble marché, merci !
J'ai juste changé Logger.log() pour consigner les erreurs, puisque console.error n'est pas pris en charge.
Pour le moment,
rien ne se passe car j'ai :
Erreur : Access denied: DriveApp.
alors que le drive est le mien donc je n'arrive pas à me donner les droits
J'ai bien en plus au début le pop-up qui me demande si j'autorise l'accès mais rien n'y fait
J'ai testé ton script chez moi, dans un dossier test, il fonctionne bien.
Essaye de mettre ce script sur un nouveau dossier test que tu créé avec quelques fichiers et vois si il fonctionne.