wolfmasa's blog

フロンターレとプログラミング関係の話題を、気が向いたときにつぶやくブログです。

GoogleDriveのいらないファイルを削除した話

GoogleDriveって使っていますか?

私は、Picasaからはじまり、長い間GoogleDriveに写真をアップしまくっていて、気づいたら800Gもの容量になってました。

容量がそんなに増えたのは、1つにはバックアップとしてRAWファイル(CR2ファイル)も保存していたからですが、この際RAWはローカルのHDDに入れて、クラウドからは削除して、容量削減に取り組んでいます。

しかし、GoogleDriveのWebから、CR2で検索して、まとめて削除しようとすると、検索リストは一部しか表示されず、スクロールしていかないと次が出ない、なんてことで、とても数百、数千のファイルを削除するのは大変です。

ということで、GoogleDriveにアクセスして、CR2ファイルを一掃するスクリプトを作ってみました。

今回はGoogleDriveなので、まずは

sudo gem install google_drive

で便利なgemを取得して、

今回は面倒だったので、ざっと

OAuth 2.0 Playground

から、アクセストークンを取得して、いざコーディング

require 'google/api_client'
require 'google_drive'

access_token = ”あくせすとーくん”

# Creates a session.
session = GoogleDrive.login_with_oauth(access_token)

def searchAndDeleteCR2(target, pathArray)
  target.contents.each do |item|
    if item.class == GoogleDrive::Collection
      searchAndDeleteCR2(item, [pathArray, item.title]) 
    elsif /cr2$/i === item.title
      puts "Delete: " + [pathArray, item.title].join('/')
      item.delete
    end
    
  end
end

target = ARGV.shift

root = session.collection_by_title(target)

p root.title
searchAndDeleteCR2(root, [])

ちょっと安易なコーディングだけど、自分しか使わない便利スクリプトだから、これくらいで十分かな。

アクセストークンは機嫌があって、油断していると機嫌切れになるけど、基本的に便利便利。

(コード上で取得すればそんなことないけど、そんなに繰り返し使うわけじゃないから、今回はこれで実装しました。)

余談ですが、

      item.delete

については、通常ゴミ箱にいれるだけだけど、空にするのが面倒な場合は、item.delete true とするといいらしい。