Скрипт для поиска и удаления только файлов, созданных мной в общей папке Google Drive - PullRequest
3 голосов
/ 06 октября 2019

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

Мне нужна помощь человека, который мог бы отправить мне отредактированный сценарий именно так, как мне нужно, чтобы он работал правильно.

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('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
  var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');

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

function deleteFiles() {
  var fileIDs = getOldFileIDs();
  fileIDs.forEach(function(fileID) {
    Drive.Files.remove(fileID);
  });
};

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

Я не могу заплатить кому-то, кто сделает это за меня, поэтому я прошу помощи.

1 Ответ

3 голосов
/ 06 октября 2019
  • Вы хотите удалить созданные файлы.
    • Файлы помещаются в общую папку.
    • К файлам относятся файлы, созданные несколькими пользователями.
    • Ниже перечислены файлы, которые вы хотите удалить.
      • Файлы, созданные 3 часа назад. В этом случае есть файлы, созданные вами и другими пользователями.
      • Для файлов, которые были созданы 3 часа назад, вы хотите оставить только самый последний файл.
      • Пока выследуя приведенному выше условию, вы хотите удалить только файлы, которые вы создали.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

Из твоего сценария и вопроса я так понял. Если мое понимание верно, как насчет этого ответа? Думайте об этом как об одном из нескольких ответов.

Точки модификации:

  • В вашей ситуации, когда добавляется "email" in owners для поискового запроса в виде and, толькосозданные вами файлы возвращаются. Таким образом, ваша цель не может быть достигнута. Поэтому необходимо использовать var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');.

В этом случае, как насчет проверки владельца по fileIDs.forEach(function(fileID) {Drive.Files.remove(fileID)}?

Pattern 1:

В этомшаблон, электронные письма владельцев извлекаются, и когда файлы удаляются, владелец проверяется и удаляет его. При этом могут быть удалены только созданные вами файлы.

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

Пожалуйста, измените функции getOldFileIDs() и deleteFiles() следующим образом.

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('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
  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 = "###"; // Added
  var obj = getOldFileIDs; // Modified
  obj.forEach(function(e) { // Modified
    if (e.owner == email) { // Added
      Drive.Files.remove(e.id); // Modified
    }
  });
};
  • Когда вы используете этот скрипт, пожалуйста, установите свой адрес электронной почты на var email = "###". Или вы также можете использовать var email = Session.getActiveUser().getEmail().

Pattern 2:

Когда файлы, которые вы не являетесь владельцем, удалены, возникает ошибка. В этом шаблоне ошибка игнорируется. При этом могут быть удалены только созданные вами файлы.

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

Пожалуйста, измените функцию deleteFiles() следующим образом.

С:
Drive.Files.remove(fileID);
Кому:
try {Drive.Files.remove(fileID)} catch(e) {}

Примечание:

  • Файлы, которые вы не являетесь владельцем, не могут быть удалены. Пожалуйста, будьте осторожны с этим.

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

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