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.
Get all files in a folder - include subfolder - as a Array of id. @Return Array of files id
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. |
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);
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.