LeandroP
LeandroP

Reputation: 377

How to list all files in Drive that are not "google" mime type using Google Apps Script?

I'v been trying to: Using Google Apps script, find all files that do not belong to me and is not a google type.

This is what I have:

// 1° try:
var queryStr = "sharedWithMe = true and not mimeType contains 'google'";
var filesIterator = DriveApp.searchFiles(queryStr);
while(filesIterator.hasNext()){
    debugger; // it never gets here
}

// 2° try:
var queryStr = "not 'me' in owners and not mimeType contains 'google'";
var filesIterator = DriveApp.searchFiles(queryStr);

while(filesIterator.hasNext()){
    debugger; // it never gets here
}

On a Google Drive UI search it's possible to find lots of files on that condition, so there must be something with the query I'm trying.

Thanks

Upvotes: 0

Views: 585

Answers (1)

Cooper
Cooper

Reputation: 64100

I think this is what you want:

function listNonGoogleMimetypes(id) {
  var id=id||'default id';
  var files=DriveApp.getFolderById(id).getFiles();
  var list=[];
  while(files.hasNext()) {
    var file=files.next();
    var type=file.getMimeType();
    if(file.getMimeType().indexOf('GOOGLE')==-1) {
      list.push(file.getName());
    }
  }
  Logger.log(JSON.stringify(list));
}

This will do it for the entire drive:

var list=[];

function listNonGoogleMimetypesInDrive() {
  getFnF();
  Logger.log(JSON.stringify(list));
}

function getFnF(folder) {
  var folder= folder || DriveApp.getRootFolder();
  var files=folder.getFiles();
  while(files.hasNext()) {
    var file=files.next();
    var type=file.getMimeType();
    var name=file.getName();
    if(!type.match(/google/i)) {
      list.push(file.getName());
    }
  }
  var subfolders=folder.getFolders() 
  while(subfolders.hasNext()) {
    var subfolder=subfolders.next();
    getFnF(subfolder);
  }
}

This may take a while to go through your entire drive. It took me about 2 minutes but I don't have that much because I just do a lot of programming on my account.

This version also includes owner email

function getFnF(folder) {
  var folder= folder || DriveApp.getRootFolder();
  var files=folder.getFiles();
  while(files.hasNext()) {
    var file=files.next();
    var type=file.getMimeType();
    var name=file.getName();
    var owner=file.getOwner().getEmail();
    if(!type.match(/google/i) && owner!='your email address') {
      list.push(file.getName());
    }
  }
  var subfolders=folder.getFolders() 
  while(subfolders.hasNext()) {
    var subfolder=subfolders.next();
    getFnF(subfolder);
  }
}

Upvotes: 2

Related Questions