Google duplicates files

I have this code for deleting duplicate files, but it doesn’t work as desired, it is in the spreadsheet and you go to the tools and click on the script manager and get three buttons

Startprocess

mark Duplicates

deleteDuplicates

The first one extracts the files, the second one duplicates the files in light red, and the third one supposedly deletes them and turns them red, although what he does is turn them only into yellow, and I cannot go there to find the error , please help me

function startProcess(){ PropertiesService.getScriptProperties().deleteAllProperties(); try{ ScriptApp.deleteTrigger(ScriptApp.getProjectTriggers()[0]); }catch(e){} var sh = SpreadsheetApp.getActiveSheet(); sh.getDataRange().clear(); sh.getRange(1,1,1,4).setValues([['fileName (logged @'+Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'MMM-dd-yyyy HH:mm')+')','fileSize','parent folders tree','fileID']]); var trig = ScriptApp.newTrigger('getDriveFilesList_').timeBased().everyMinutes(5).create(); Logger.log(trig.getUniqueId()+' '+trig.getHandlerFunction()); getDriveFilesList_(); } function getDriveFilesList_(){ var content = []; var startTime = new Date().getTime(); var sh = SpreadsheetApp.getActiveSheet(); if( ! PropertiesService.getScriptProperties().getProperty('numberOfFiles')){ PropertiesService.getScriptProperties().setProperty('numberOfFiles',0); } var numberOfFiles = Number(PropertiesService.getScriptProperties().getProperty('numberOfFiles')); Logger.log(numberOfFiles); var max = numberOfFiles+10000; if( ! PropertiesService.getScriptProperties().getProperty('continuationToken')){ var files = DriveApp.getFiles(); // var files = DriveApp.getFolderById('0B3qSFd_____MTFZMDQ').getFiles();// use this line and comment the above if you want to process a single folder // use your chozen folder ID of course (available from the browser url , the part after "https://drive.google.com/?authuser=0#folders/") }else{ var files = DriveApp.continueFileIterator(PropertiesService.getScriptProperties().getProperty('continuationToken')) } while(files.hasNext() && numberOfFiles<(max)){ var file = files.next() if(file.getSize()>0){ numberOfFiles++; var folder = '(shared)'; if(file.getParents().hasNext()){folder = getTree_(file)} content.push([file.getName(),file.getSize(),folder,file.getId()]) } if(new Date().getTime()-startTime > 250000){break}; } sh.getRange(sh.getLastRow()+1,1,content.length,content[0].length).setValues(content); if(!files.hasNext()){ScriptApp.deleteTrigger(ScriptApp.getProjectTriggers()[0]);Logger.log('done !'); sh.getRange(sh.getLastRow()+1,1).setValue('All files processed ('+numberOfFiles+' found)')}; var continuationToken = files.getContinuationToken() PropertiesService.getScriptProperties().setProperty('numberOfFiles',numberOfFiles); PropertiesService.getScriptProperties().setProperty('continuationToken',continuationToken); } function markDuplicates(){ handleDuplicates_(false) } function trashDuplicates(){ handleDuplicates_(true) } function handleDuplicates_(trash){ var sh = SpreadsheetApp.getActiveSheet(); sh.setFrozenRows(1); sh.sort(1); var data = sh.getDataRange().getValues() var headers = data.shift() var lastComment = data.pop(); var toDelete = []; var item = data[0]; for(var n=1 ; n<data.length; n++){ if(data[n][0]==item[0] && data[n][1]==item[1]){ toDelete.push('delete '+ n); } item=data[n]; } var marker = sh.getRange(2,1,data.length,1).getBackgrounds(); for(var n in data){ if(!trash){marker.push(['#FFF'])}; if(toDelete.indexOf('delete '+n)>-1 && !trash){ marker[n][0] = '#F99'; } if(toDelete.indexOf('delete '+n)>-1 && trash){ if(marker[n][0]==='#ff9999'){ try{ DriveApp.getFileById(data[n][3]).setTrashed(trash); marker[n][0] = '#F33'; }catch(err){Logger.log(err)} }else{ marker[n][0] = '#FF9'; 3 } } } sh.getRange(2,1,marker.length,1).setBackgrounds(marker); } function getTree_(file){ var tree = []; var folderP = file.getParents() while (folderP.hasNext()){ var folder = folderP.next(); folderP = folder.getParents(); tree.push(folder.getName()); } return tree.reverse().join('/'); } 
+6
source share
2 answers

I found several problems in your code, so I created a new ajrHandleDuplicates_ (), which seems to do what you need. I only ran simple tests from one folder, and I disabled the continuation trigger.

You can run the script from this sheet (and take a copy, although you have edit access), and you can refuse the files in this folder to check it (you will see the results of my last test). I made a small text file on my desktop and dropped it and renamed it.

+1
source

Using the code of the worksheet by Andrew Roberts (fantastic start, thanks Andrew), I made a few changes to suit my needs, adding file.getDateCreated () so that I can make comparisons by date to get rid of any duplicate file with the same name myself which was from an older date.

0
source

Source: https://habr.com/ru/post/982396/


All Articles