Удалить файл, если его имя начинается с даты старше текущей (Google Диск) - PullRequest
1 голос
/ 19 октября 2019

С помощью сообщества Stackoverflow я смог создать этот сценарий, который удаляет файлы старше 3 часов:

function getOldFileIDs() {
  // Old date is 3 Hours
  var oldDate = new Date().getTime() - 3600*1000*3;
  var cutOffDate = new Date(oldDate).toISOString();

  // Get folderID using the URL on google drive
  var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXX');
  var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');

  var obj = [];
  while (files.hasNext()) {
    var file = files.next();
    obj.push({id: file.getId(), date: file.getDateCreated(), owner: file.getOwner().getEmail()}); // Modified
  }
  obj.sort(function(a, b) {
    var a= new Date(a.date).valueOf();
    var b= new Date(b.date).valueOf();
    return b-a;
  });
  obj.shift();
  return obj; // Modified
};

function deleteFiles() {
  var email = "XXXXXXXXXXXXXXXXX@gmail.com"; // Added
  var obj = getOldFileIDs(); // Modified
  obj.forEach(function(e) { // Modified
    if (e.owner == email) { // Added
      Drive.Files.remove(e.id); // Modified
    }
  });
};

Имена файлов в этой папке всегда начинаются с даты, например:

2019/10/05 SerieA Vasco da Gama x Flamengo.pdf

Мне нужна помощь, чтобы узнать, что мне нужно изменить в скрипте и как он будет выглядеть, вместо того, чтобы удалять, когда у него более 3 часов создания, это из его файлов, которые имеют дату раньше текущей.

Я пытался изменить .getdate, но это было совершенно безуспешно, я не мог заставить скрипт анализировать начало имени файла, я могнайти только имя файла и его идентификатор.

1 Ответ

3 голосов
/ 19 октября 2019
  • Есть файлы с именем файла вроде 2019/10/05 SerieA Vasco da Gama x Flamengo.pdf.
    • Строка даты и формат всегда начинаются с 10 символов в верхней части имени файла и yyyy/MM/dd соответственно.
  • Вы хотите удалить старые файлыстрока даты в имени файла до сегодняшнего дня.
    • В этом случае more than 3 hours of creation игнорируется. Поэтому modifiedDate также игнорируется.
  • Вы хотите добиться этого с помощью Google Apps Script.

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как один из нескольких ответов. Процесс этого измененного сценария выглядит следующим образом.

Поток:

  1. Извлечение всех файлов в папке.
  2. Для каждого файла извлеките имя файла и датуstring.
  3. Преобразовать строку даты в имени файла в объект даты. И это по сравнению с сегодняшним днем. Когда дата в имени файла старше, чем сегодня, информация о файле добавляется в массив для удаления.
  4. Удаляет файлы из полученной информации о файле

Модифицированный скрипт:

Когда ваш скрипт изменяется, пожалуйста, измените функцию getOldFileIDs() следующим образом.

function getOldFileIDs() {
  var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXX');
  var files = folder.getFiles();
  var today = new Date(new Date().toDateString()).getTime();
  var obj = [];
  while (files.hasNext()) {
    var file = files.next();
    var dateFromFilename = file.getName().substr(0, 10);
    if (/\d{4}\/\d{2}\/\d{2}/.test(dateFromFilename)) { // Here, the format of date string is checked.
      var date = new Date(dateFromFilename).getTime();
      if (date < today) {
        obj.push({id: file.getId(), date: file.getDateCreated(), owner: file.getOwner().getEmail()});
      }
    }
  }
  return obj;
};

Ссылки:

Если я неправильно понял ваш вопрос и это не тот результат, которого вы хотите, я приношу свои извинения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...