指定フォルダ配下のomaファイルを抹殺
我が家では音楽ファイルは、ひとつのフォルダにまとめて格納されています。
どのくらいまとまっているかというと、SonicStageとiTunesが同じフォルダを指してるカンジ。
最初使用していたSony SonicStageが初期設定で作り出すomaファイルと、
Apple iTunesが作り出すその他ファイルが同じフォルダ内に展開されるという
祭りの状態だったので、せめて、omaファイルだけでも除去しようと考えまして、
ぐだぐだとスクリプト組んだので、備忘録までに。
require 'find' require 'fileutils' # コピー元フォルダ dir1 = "\E:/music" # コピー先フォルダ dir_oma_temp = "\E:/temp/music" # ログファイル名 log_path = dir_oma_temp + "/copy.log" log = [] # ファイル数 count = 0 # コピー元パス=>ファイル名 h = Hash::new # 指定フォルダ配下の指定ファイルを抽出 Find::find(dir1) do | path | if /\.oma$/ =~ path /\/(\d*-.*\.oma$)/six =~ path # ここで拡張子omaを指定 # 重複値の場合、文末に適当な数字を追記する if h::has_value?($1) h[path] = $1 + rand(10)::to_s else h[path] = $1 end end end # TEMPフォルダ作成 FileUtils::mkdir_p(dir_oma_temp) if !File::exist?(dir_oma_temp) # TEMPフォルダへ格納 h::each_key do | path | log << path FileUtils::install( path, dir_oma_temp + "/" + h[path] ) count += 1 end # コピー元のファイルを削除する h::each_key do | path | FileUtils::rm(path) end # 空のディレクトリを削除する Find::find(dir1) do | path | begin Dir::rmdir(path) rescue Errno::ENOTEMPTY, Errno::ENOTDIR next rescue break end end # ログ出力 File::open(log_path, "w") do | io | io::puts "Total :#{count} files. #{log}" end