Ruby

iTunes Libraryの重複ファイルを消すスクリプトをRubyで書く

Posted in Ruby on 7月 5th, 2008 by Norihisa Nagano – Be the first to comment

Ruby入門しました.
何か練習に書いてみようということで,ひとつ.

iTunesでライブラリを再構築したら
うっかり,同じ曲も足されちゃって
hoge.mp3
hoge 2.mp3
というのが果てしなく増殖してしまうことがよくあります.

こういうのさくっとRubyで解決できたら便利だなと挑戦.
戦略は
ファイル名が
***(space)2.extensionなら,
***(space).extensionを探す
あれば,重複だーということで削除.
レアなケースで
***(space)0.extension
***(space)1.extension
***(space)2.extension
***(space)3.extension
という曲名だったらアウトですが,気にしない.だって分からんもん.

ディレクトリ以下の全てのファイルパスを取得するコードをたのしいRubyからパクって
僕はdeleteIfDuplicatedを実装しただけの楽ちんコード.

def deleteIfDuplicated(fileName)

  p fileName

  if / 2./ =~ fileName

    find = fileName.sub(” 2.”,‘.’)

    if FileTest.exist?(find)

      p ‘delete:’,fileName

      File.delete(fileName);

    end

  end 

end

def traverse(path)

  if FileTest.directory?(path)

    dir = Dir.open(path)

    while name = dir.read

      next if name == “.”

      next if name == “..”

      traverse(path + “/” + name)

    end

    dir.close

  else

    deleteIfDuplicated(path)

  end

end

こういう風に使います.

path = “/Volumes/400GB/iTunes”

traverse(path)

で,削除したら
iTunes のライブラリからファイルが存在しない曲を効率良く取り除く方法
で削除.

もし試す場合,何かが起こっても僕は一切責任取れませんので
バックアップなどやってから実行してください.

僕の環境では5000曲が削除できました.

あ〜,ちゃんと 2.extensionが最後が確認した方がいいな.
まぁいいや.