0

動画ファイル (.avi) を含むルート Google ドライブにフォルダーを作成しました。ファイルの総数が 100 ファイルを超える場合、古いビデオ ファイルを完全に削除するには、Google Apps スクリプトを作成する必要がありますか? つまり、最後の (新しい) 100 ファイルを除くすべてのビデオ ファイルを削除します。

各ファイルの名前は、このファイルが作成された時間に関連しています。例: 2013-02-25__20-29-45-01.avi

2013-02-25__20-24-49-09.avi

2013-02-25__18-26-24-08.avi

……

したがって、スクリプトは最初にこれらのファイルを新しいものから始まり古いもので終わるアルファベット順にリストし、次に最初の 100 個のファイルを保持し、他のすべてのファイルを完全に削除する必要があると思います。私はbashスクリプトでそれを行う方法を知っていますが、JavaScript(.gs)を使用していると思われるGoogleドライブでは知りません。

4

1 に答える 1

0

私がコメントで言ったように、あなたが言及したスクリプトはあなたが望むものからそれほど遠くはありませんでした...しかし、あなたの状況はもう少し複雑であることを認めますので、これはストポリティクスの別の例外になるとしましょう;-)

とはいえ、このコードを徹底的にテストしたわけではないので、おそらく調整が必要になるでしょう。中間結果をテストするために、スクリプト全体にコメント付きのログをいくつか残しました。それらを使用することを躊躇しないでください。setTrashedまた、メールアドレスを更新することを考えて、手動で元に戻すことができることを忘れないでください;-) (新しいコードを試すときはそうする方が良いでしょう)

編集:今朝、スクリプトをテストするのに少し時間がかかりました。いくつかの「近似」がありました;-)ここに、うまく機能する「クリーン」バージョンがあります

function DeleteMyOldAvi() {
    var pageSize = 200;
    var files = null;
    var token = null;
    var i = null;
    var totalFiles = []
    var toDelete = []
    Logger.clear()

    do {
    var result = DocsList.getAllFilesForPaging(pageSize, token);
    var files = result.getFiles()
    var token = result.getToken();
        for(n=0;n<files.length;++n){
            if(files[n].getName().toLowerCase().match('.avi')=='.avi'){
              totalFiles.push([files[n].getName(),files[n].getDateCreated().getTime(),files[n].getId()]);// store name, Date created in mSec, ID in a subarray
//            Logger.log(files[n].getName()+' created on '+Utilities.formatDate(files[n].getDateCreated(), 'GMT','MMM-dd-yyyy'))
            }
          }    
     } while (files.length == pageSize);// continue until job is done

     totalFiles.sort(function(x,y){ // sort array on milliseconds date created (numeric/descending)
                var xp = x[1];
                var yp = y[1];
                return yp-xp ;
                 });
//     Logger.log(totalFiles.length)

       if(totalFiles.length>100){

        for(nn=totalFiles.length-1;nn>=100;nn--){
          toDelete.push(totalFiles[nn]) ;// store the files to delete
           }
//       Logger.log(toDelete)

        for(n=0;n<toDelete.length;++n){
          var file = toDelete[n]
          DocsList.getFileById(file[2]).setTrashed(true);// move to trash each file that is in the toDelete array
          Logger.log(file[0]+' was deleted');// log the file name to create mail message
          }
          MailApp.sendEmail('myMail@gmail.com', 'Script AUTODELETE report', Logger.getLog());// send yourself a mail
       }else{
          MailApp.sendEmail('myMail@gmail.com', 'Script AUTODELETE report', 'No file deleted');// send yourself a mail
       }
 } 
于 2013-03-02T23:29:50.380 に答える