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)

  1. nextmatches_England_Premier-League
  2. nextmatches_France_Ligue-1
  3. nextmatches_Germany_Bundesliga
  4. nextmatches_Italy_Serie-A
  5. nextmatches_Netherlands_Eredivisie
  6. nextmatches_Spain_Laliga
fichiers drive

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.

capture d ecran 2024 09 09 123552

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.

Rechercher des sujets similaires à "suppression fichiers automatique gdrive"