I am using a script to recursively list all the files in a Google drive folder to a spreadsheet. It is working fine but i need to sort the file listing by size (highest size on top). Also drive api returns value of size in bytes but i need them in GB's. I haven't found any way to do it through api directly, so i want to divide the size value of each file by 1 073 741 824 up to 1 decimal rounding it off (1 GB = 1 073 741 824 bytes)
function start() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type", "Folder", "Folder Slug"]);
var folders = DriveApp.getFolderById('FOLDER_ID');
var folder = folders.getFolders();
if (folder.hasNext()) {
processFolder(folder);
} else {
Browser.msgBox('Folder not found!');
}
function processFolder(folder) {
while (folder.hasNext()) {
var f = folder.next();
var contents = f.getFiles();
addFilesToSheet(contents, f);
var subFolder = f.getFolders();
processFolder(subFolder);
}
}
function addFilesToSheet(files, folder) {
var data;
var folderName = folder.getName();
while (files.hasNext()) {
var file = files.next();
Logger.log(file.getName());
sheet.appendRow([
file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),
file.getMimeType(),
folderName
]);
}
}
}