Skip to content

Instantly share code, notes, and snippets.

@ramboviking
Last active April 11, 2021 01:23
Show Gist options
  • Save ramboviking/d9dcac7bb552ab01c42af1671dcf9181 to your computer and use it in GitHub Desktop.
Save ramboviking/d9dcac7bb552ab01c42af1671dcf9181 to your computer and use it in GitHub Desktop.
Get all files in a folder (include subfolder) in Google Drive using Apps Script.

Apps Script support build-in function folder.getFiles() to get files in a folder. But it 's not include files in subfolder. So I wrote function listAllFiles to resolve it.

listAllFiles(folderId, [mimeType], [depth])

Get all files in a folder - include subfolder - as a Array of id. @Return Array of files id

Parameters

Name Type Description
folderId String A folder id of Google Drive folder. Do not support root folder.
mimeType Array [Option] Array of Enum MIME type. Default value 's some common Google Workplace file type.
depth Number [Option] Folder level to crawl (parent folder level 's 1). Maximum level 's 5. If depth less than 1, return empty Array.

Using

Get all files in the folder with folderId = 'YOUR_FOLDER_ID'.

var folderId = 'YOUR_FOLDER_ID';
var idList = listAllFiles(folderId);
idList.forEach(id => {
    var fileName = DriveApp.getFileById(id).getName();
    Logger.log(fileName);
  })

Get certain file types in the folder.

var folderId = 'YOUR_FOLDER_ID';
var mime = [MimeType.GOOGLE_DOCS, MimeType.GOOGLE_SHEETS, MimeType.GOOGLE_SLIDES];
var idList = listAllFiles(folderId, mime);
Logger.log(idList);

Get image files in the folder, 3 depth level folder.

var folderId = 'YOUR_FOLDER_ID';
var type = [GOOGLE.JPEG];
var depth = 3;
var idList = listAllFiles(folderId, type, depth);
Logger.log(idList);

Get all files with 2 depth level folder.

var folderId = 'YOUR_FOLDER_ID';
var depth = 2;
var idList = listAllFiles(folderId, null, depth);
Logger.log(idList);

Get empty result, because of negative level.

var folderId = 'YOUR_FOLDER_ID';
var depth = -2;
var idList = listAllFiles(folderId, null, depth);
Logger.log(idList);

Source code

Function crawlFolder call itseft to loop in subfolder.

function listAllFiles(folderId, mimeType, depth) {
  if (!folderId || folderId === '') {
    throw new Error('Folder id was not found.');
  }
  var folder = DriveApp.getFolderById(folderId);
  var iDList_ = [];
  var mimeType = mimeType || [
    MimeType.GOOGLE_DOCS, 
    MimeType.GOOGLE_SHEETS,
    MimeType.GOOGLE_SLIDES,
    MimeType.PDF,
    MimeType.JPEG,
    MimeType.PNG
    ];
  var depth = depth || 5; // set default value 's 5.
  if (depth >5) {depth = 5};
  var level = 1;

  function crawlFolder(folder, level) {
    var parent = folder;
    var children = parent.getFolders();
    getFiles(folder, mimeType);
    level += 1;
    if (level > depth) {return};
    while (children.hasNext()) {
      var child = children.next();
      crawlFolder(child, level);
    }
  }

  function getFiles(folder, mimeType) {
    var files = folder.getFiles();
    while (files.hasNext()) {
      let file = files.next();
      if (mimeType.includes(file.getMimeType())) {iDList_.push(file.getId())}
    }
  }

  crawlFolder(folder, level);
  return iDList_;
}

View code in the Google Apps Script project.

Reference

Stackoverflow

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment