Skip to content

Instantly share code, notes, and snippets.

@amit-g
Created September 1, 2023 01:36
Show Gist options
  • Save amit-g/99908555ea4beddc5a68b6ae107890bd to your computer and use it in GitHub Desktop.
Save amit-g/99908555ea4beddc5a68b6ae107890bd to your computer and use it in GitHub Desktop.
Apps Script - DriveReorganization
function enumerateFolders(folders) {
while (folders.hasNext()) {
let folder = folders.next();
console.log(folder.getName());
}
}
function enumerateFoldersInRootFolder() {
let folders = DriveApp.getRootFolder().getFolders();
console.log("Folders in root folder");
enumerateFolders(folders);
}
function enumerateFiles(files) {
while (files.hasNext()) {
let file = files.next();
console.log(file.getName());
}
}
function enumerateFilesInRootFolder() {
let files = DriveApp.getRootFolder().getFiles();
console.log("Files in root folder");
enumerateFiles(files);
}
function enumerateAllFiles() {
let files = DriveApp.getFiles();
console.log("All Files");
enumerateFiles(files);
}
function getFirstSubFolderByName(folder, folderName) {
let subFolders = folder.getFoldersByName(folderName);
if (subFolders.hasNext()) {
return subFolders.next();
}
else {
return null;
}
}
function moveFoldersInRootFolderToFirstCharSubFolder() {
const rootFolder = DriveApp.getRootFolder();
const exemptFolderNames = [...'abcdefghijklmnopqrstuvwxyz'.toLocaleUpperCase()];
//const exemptFolders = exemptFolderNames.reduce((a, c) => { ...a, c: rootFolder.getFoldersByName(c) }, {});
const exemptFolders = {};
exemptFolderNames.forEach(folderName => exemptFolders[folderName] = getFirstSubFolderByName(rootFolder, folderName));
//console.log(exemptFolderNames);
//console.log(exemptFolders);
let folders = rootFolder.getFolders();
console.log("Folders in root folder");
while (folders.hasNext()) {
let folder = folders.next();
let folderName = folder.getName();
console.log(folderName);
if (exemptFolderNames.includes(folderName.toLocaleUpperCase())) {
console.log("Skipping " + folderName + "...");
}
else {
let folderNameToMoveUnder = folderName.charAt(0).toLocaleUpperCase();
let folderToMoveUnder = exemptFolders[folderNameToMoveUnder];
//console.log({"folderNameToMoveUnder": folderNameToMoveUnder, "folderToMoveUnder": folderToMoveUnder});
if (!folderToMoveUnder) {
console.log('Creating folder ' + folderNameToMoveUnder + " ...")
folderToMoveUnder = rootFolder.createFolder(folderNameToMoveUnder);
exemptFolders[folderNameToMoveUnder] = folderToMoveUnder;
}
console.log("Moving " + folderName + " to " + folderNameToMoveUnder);
folder.moveTo(folderToMoveUnder);
}
}
}
function moveFilesInRootFolderToFirstCharSubFolder() {
const rootFolder = DriveApp.getRootFolder();
const exemptFolderNames = [...'abcdefghijklmnopqrstuvwxyz'.toLocaleUpperCase()];
//const exemptFolders = exemptFolderNames.reduce((a, c) => { ...a, c: rootFolder.getFoldersByName(c) }, {});
const exemptFolders = {};
exemptFolderNames.forEach(folderName => exemptFolders[folderName] = getFirstSubFolderByName(rootFolder, folderName));
//console.log(exemptFolderNames);
//console.log(exemptFolders);
const exemptFileNames = ['DriveReorganization'];
let files = rootFolder.getFiles();
console.log("Files in root folder");
while (files.hasNext()) {
let file = files.next();
let fileName = file.getName();
console.log(fileName);
if (exemptFileNames.includes(fileName)) {
console.log("Skipping " + fileName + "...");
}
else {
let folderNameToMoveUnder = fileName.charAt(0).toLocaleUpperCase();
let folderToMoveUnder = exemptFolders[folderNameToMoveUnder];
//console.log({"folderNameToMoveUnder": folderNameToMoveUnder, "folderToMoveUnder": folderToMoveUnder});
if (!folderToMoveUnder) {
console.log('Creating folder ' + folderNameToMoveUnder + " ...")
folderToMoveUnder = rootFolder.createFolder(folderNameToMoveUnder);
exemptFolders[folderNameToMoveUnder] = folderToMoveUnder;
}
console.log("Moving " + fileName + " to " + folderNameToMoveUnder);
file.moveTo(folderToMoveUnder);
}
}
}
function main() {
console.log(DriveApp.getRootFolder().getName());
// enumerateFoldersInRootFolder();
// enumerateFilesInRootFolder();
moveFoldersInRootFolderToFirstCharSubFolder();
moveFilesInRootFolderToFirstCharSubFolder();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment