Skip to content

Instantly share code, notes, and snippets.

@libraplanet
Last active August 7, 2016 13:04
Show Gist options
  • Save libraplanet/de02616c23e50a75c91d21a2a6784130 to your computer and use it in GitHub Desktop.
Save libraplanet/de02616c23e50a75c91d21a2a6784130 to your computer and use it in GitHub Desktop.
movie file on google drive using google apps script.
/**
* entry point.
*/
function main() {
/* src dir id. */
var srcFolderId = '*****';
/* tgt dir id. */
var tgtFolderId = '*****';
var srcFolder = DriveApp.getFolderById(srcFolderId);
var tgtFolder = DriveApp.getFolderById(tgtFolderId);
Mover.run(srcFolder, tgtFolder);
}
/**
* constructor.
*/
Mover = function(){
};
/**
* moveFiles.
* @param srcFolder source Folder object.
* @param tgtFolder target Folder object.
*/
Mover._moveFiles = function(srcFolder, tgtFolder) {
Logger.log('"' + srcFolder.getName() + '" -> "' + tgtFolder.getName() + '"');
var files = srcFolder.getFiles();
var folders = srcFolder.getFolders();
while(files.hasNext()) {
var file = files.next();
var name = file.getName();
if(name.indexOf('.') == 0) {
Logger.log('ignoire file "' + file.getName() + '"');
} else {
var oldFiles = tgtFolder.getFilesByName(name);
while(oldFiles.hasNext()) {
var oldFile = oldFiles.next();
oldFile.setTrashed(true);
}
tgtFolder.addFile(file);
srcFolder.removeFile(file);
Logger.log('moved file "' + file.getName() + '"');
}
}
while(folders.hasNext()) {
var src = folders.next();
var name = src.getName();
var tgtFolders = tgtFolder.getFoldersByName(name);
var tgt;
if(tgtFolders.hasNext()) {
tgt = tgtFolders.next();
Logger.log('exists next folder "' + name + '"');
} else {
tgt = tgtFolder.createFolder(name);
Logger.log('create next folder "' + name + '"');
}
Logger.log('');
this._moveFiles(src, tgt);
}
};
/**
* cleanap blank folders.
* @param folder Folder object.
*/
Mover._cleanapBlankFolders = function(folder) {
var files = folder.getFiles();
var folders = folder.getFolders();
var ret = true;
if(files.hasNext()) {
return false;
}
while(folders.hasNext()) {
var f = folders.next();
if(this._cleanapBlankFolders(f)) {
var name = f.getName();
f.setTrashed(true);
Logger.log('trashed folder "' + name + '"');
ret &= true;
} else {
ret &= false;
}
}
return ret;
};
/**
* run.
* @param srcFolder source Folder object.
* @param tgtFolder target Folder object.
*/
Mover.run = function(srcFolder, tgtFolder) {
Logger.log('start');
Logger.log('moveFiles()');
this._moveFiles(srcFolder, tgtFolder);
Logger.log('cleanapBlankFolders at source folder.');
this._cleanapBlankFolders(srcFolder);
Logger.log('cleanapBlankFolders at target folder.');
this._cleanapBlankFolders(tgtFolder);
Logger.log('end');
};
movie file on google drive using google apps script.
・require sorce directory id.
・require target directory id.
・recursive processing directory tree.
・copy target is first match directory, if directory is exists.
・delete same name files before move, if file is exists.
・don't moving, if file name prefix is "."
・delete blank directory from target directory after processing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment