Skip to content

Instantly share code, notes, and snippets.

@masom
Created January 4, 2012 17:45
Show Gist options
  • Save masom/1561148 to your computer and use it in GitHub Desktop.
Save masom/1561148 to your computer and use it in GitHub Desktop.
Ruby music tree cleaner
module MusicCleaner
class Cleaner
def initialize(dir, musicfiles = nil)
@types = musicfiles || ['.mp3', '.ogg', '.flac', '.m4a', '.aac']
@delete = ['.ini', '.txt', '.nfo', '.db', '.m3u']
@skip = ['.', '..']
@dir = dir
end
def clean!(dir = nil)
dir = dir || @dir
raise IOError, "Directory #{dir} does not exists." unless File.directory? @dir
return if @skip.include? dir
musicFiles = 0
unlink = []
Dir.new(dir).each do |f|
next if @skip.include? f
path = File.join(dir, f)
if File.directory? path
clean! path
else
if @types.include?(File.extname f)
musicFiles += 1
end
if @delete.include?(File.extname f)
unlink << path
end
end
end
delete_files! unlink
entries = Dir.entries(dir).reject {|f| ['.','..'].include? f}
if musicFiles == 0 && entries.empty?
delete_dir! dir
return
end
if musicFiles == 0
puts "No music in #{dir}"
puts "Contains:"
puts "\t#{entries}"
end
end
def delete_files!(files)
files.each do |f|
File.unlink f
end
end
def delete_dir!(dir)
begin
Dir.unlink(dir)
rescue SystemCallError => e
puts "Directory `#{dir}` could not be deleted due to: #{e.message}"
end
end
end
end
Usage:
mc = MusicCleaner::Cleaner.new("/home/me/Music")
mc.clean!
@masom
Copy link
Author

masom commented Jan 4, 2012

A small library cleaner I wrote to get rid of empty folders (thanks iTunes!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment