Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to delete a File in Google Drive?

Tags:

How do I write a Google Apps Script that deletes files?

This finds files:

var ExistingFiles = DocsList.find(fileName);

But DocsList.deleteFile does not exist to delete a file.

Is there a way to move those files to another Folder or to Trash?

The other workaround I would consider is to be able to override an existing file with the same name.

Currently when I want to create a file with a name already used in MyDrive then it creates a second file with the same name. I would like to keep 1 file (the new one is kept and the old one is lost).

like image 434
user1962847 Avatar asked Jan 09 '13 16:01

user1962847


4 Answers

There are 3 services available to delete a file.

  • DriveApp - Built-in to Apps Script
  • Advanced Drive Service - Built-in to Apps Script but must be enabled. Has more capability than DriveApp
  • Google Drive API - Not built-in to Apps Script, but can be used from Apps Script using the Drive REST API together with UrlFetchApp.fetch(url,options)

The DocsList service is now deprecated.

The Advanced Drive Service can be used to delete a file without sending it to the trash. Seriously consider the risk of not being able to retrieve the deleted file. The Advanced Drive Service has a remove method which removes a file without sending it to the trash folder. Advanced services have many of the same capabilities as the API's, without needing to make an HTTPS GET or POST request, and not needing an OAuth library.

function delteFile(myFileName) {   var allFiles, idToDLET, myFolder, rtrnFromDLET, thisFile;    myFolder = DriveApp.getFolderById('Put_The_Folder_ID_Here');    allFiles = myFolder.getFilesByName(myFileName);    while (allFiles.hasNext()) {//If there is another element in the iterator     thisFile = allFiles.next();     idToDLET = thisFile.getId();     //Logger.log('idToDLET: ' + idToDLET);      rtrnFromDLET = Drive.Files.remove(idToDLET);   }; }; 

This combines the DriveApp service and the Drive API to delete the file without sending it to the trash. The Drive API method .remove(id) needs the file ID. If the file ID is not available, but the file name is, then the file can first be looked up by name, and then get the file ID.

In order to use DriveAPI, you need to add it through the Resources, Advanced Google Services menu. Set the Drive API to ON. AND make sure that the Drive API is turned on in your Google Cloud Platform. If it's not turned on in BOTH places, it won't be available.

like image 74
Alan Wells Avatar answered Oct 09 '22 10:10

Alan Wells


Now you may use the following if the file is as a spreadsheet, doc etc.:

 DriveApp.getFileById(spreadsheet.getId()).setTrashed(true); 

or if you already have the file instead of a spreadsheet, doc etc. you may use:

file.setTrashed(true); 
like image 39
Riyafa Abdul Hameed Avatar answered Oct 09 '22 10:10

Riyafa Abdul Hameed


This code uses the DocsList Class which is now deprecated.

try this :

function test(){
deleteDocByName('Name-of-the-file-to-delete')
}

function deleteDocByName(fileName){
  var docs=DocsList.find(fileName)
    for(n=0;n<docs.length;++n){
     if(docs[n].getName() == fileName){
      var ID = docs[n].getId()
      DocsList.getFileById(ID).setTrashed(true)
      }
     }
    }

since you can have many docs with the same name I used a for loop to get all the docs in the array of documents and delete them one by one if necessary.

I used a function with the filename as parameter to simplify its use in a script, use test function to try it.

Note : be aware that all files with this name will be trashed (and recoverable ;-)

About the last part of your question about keeping the most recent and deleting the old one, it would be doable (by reading the last accessed date & time) but I think it is a better idea to delete the old file before creating a new one with the same name... far more logical and safe !

like image 22
Serge insas Avatar answered Oct 09 '22 11:10

Serge insas


Though the The service DocsList is now deprecated, as from the Class Folder references, the settrashed method is still valid:

https://developers.google.com/apps-script/reference/drive/folder#settrashedtrashed

So should work simply this:

ExistingFiles.settrashed(true);
like image 30
Carmine Tambascia Avatar answered Oct 09 '22 09:10

Carmine Tambascia