Google Apps Script
Jump to navigation
Jump to search
Google Scripts stop executing after 30 minutes. I have not found the setting to increase that.
Here is a useful script for plodding through a Google Drive and listing the documents therein, and its sub-folders. You will not find another script like it because this one works. The documentation on how to work out the path of a file is wrong, as is much of the advice online on how to do it.
function ListNamedFilesandFolders() {
/* Adapted from Code written by @hubgit https://gist.github.com/hubgit/3755293
Updated since DocsList is deprecated https://ctrlq.org/code/19854-list-files-in-google-drive-folder
*/
// List all files and sub-folders in a single folder on Google Drive
// declare the folder name
var foldername = 'PUT_FOLDER_NAME_HERE';
// declare this sheet
var sheet = SpreadsheetApp.getActiveSheet();
// clear any existing contents
sheet.clear();
// append a header row
// sheet.appendRow(["Folder","Name", "Date Last Updated", "Size", "URL", "ID", "Description", "Type", "Owner", "Owner2", "Owner3", "Path", "Created"]);
sheet.appendRow([ "Name", "Date Last Updated", "Type", "Path", "Created"]);
// getFoldersByName = Gets a collection of all folders in the user's Drive that have the given name.
// folders is a "Folder Iterator" but there is only one unique folder name called, so it has only one value (next)
var folders = DriveApp.getFoldersByName(foldername);
var foldersnext = folders.next();
// Logger.log("THE FOLDER IS "+foldersnext);// DEBUG
//Initiate recursive function
listFilesAndSubfolders(foldersnext, foldername);
}
function listFilesAndSubfolders(folder, path) {
listFiles(folder, path);
var subfolders = folder.getFolders();
while (subfolders.hasNext()) {
var mysubfolders = subfolders.next();
var mysubfolderName = mysubfolders.getName();
path = path + "/" + mysubfolderName;
listFilesAndSubfolders(mysubfolders, path);
}
}
function listFiles(foldersnext, path) {
var data = [];
var sheet = SpreadsheetApp.getActiveSheet();
// list files in this folder
// myfiles is a File Iterator
var myfiles = foldersnext.getFiles();
// Logger.log("FILES IN THIS FOLDER"); DEBUG
var lastFAllParents = "zzz"
// loop through files in this folder
while (myfiles.hasNext()) {
var myfile = myfiles.next();
var fname = myfile.getName();
var fdate = myfile.getLastUpdated();
// speedo var fsize = myfile.getSize();
// speedo var furl = myfile.getUrl();
// speedo var fid = myfile.getId();
// speedo var fdesc = myfile.getDescription();
var ftype = myfile.getMimeType();
// speedo var fowner = myfile.getOwner();
// speedo var fowner2 = fowner.getName();
// speedo var fowner3 = fowner.getEmail();
var fAllParents = myfile.getParents();
if ( fAllParents != lastFAllParents) {
lastFAllParents = fAllParents;
var fpath = ""
while ( fAllParents.hasNext()) {
var fNextFolder = fAllParents.next();
var fNextFolderName = fNextFolder.getName();
fpath = fNextFolderName + "/" + fpath;
fAllParents = fNextFolder.getParents();
// speedo debugger;
}
}
// speedo debugger;
var fcreated = myfile.getDateCreated();
//Logger.log("File Name is "+myfile.getName()); //Logger.log("Date is "+myfile.getLastUpdated()); //Logger.log("Size is "+myfile.getSize());
//Logger.log("URL is "+myfile.getUrl()); //Logger.log("ID is "+myfile.getId()); //Logger.log("Description is "+myfile.getDescription());
//Logger.log("File Type is "+myfile.getMimeType());
// Populate the array for this file
data = [
path,
fname,
fdate,
// speedo fsize,
// speedo furl,
// speedo fid,
// speedo fdesc,
ftype,
// speedo fowner,
// speedo fowner2,
// speedo fowner3,
fpath,
fcreated
];
//Logger.log("data = "+data); //DEBUG
sheet.appendRow(data);
} // Completes listing of the files in the named folder
}