Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ##
- # This script moves all the TV series I downloaded to its respective directories.
- #
- # Created by Diogo Santos <diogo@diogosantos.com>
- ##
- class String
- def camelize
- self.split(/[^a-z0-9]/i).map{|w| "#{w.capitalize} "}.join.chop
- end
- def contains?(str)
- return self.index(str) && self.index(str) > -1
- end
- def starts_with(str)
- return self.index(str) && self.index(str) == 0
- end
- end
- class Dir
- def video_files
- files = []
- self.visible_entries.each do |file|
- file = self.path + file
- if File.directory?( file )
- files.concat( Dir.new( file + "/" ).video_files )
- else
- files << file if TV.valid_video_file?(file)
- end
- end
- return files
- end
- def visible_entries
- self.entries.delete_if {|file_name| file_name.starts_with('.') }
- end
- end
- class TV
- LOCATION = '$HOME/Movies/TV/'
- EXTENSIONS = ['avi', 'mkv']
- attr_reader :name
- def initialize(name, file)
- @name = name
- @file = file
- end
- def move()
- %x[mv "#{@file}" "#{LOCATION + @name.camelize}"]
- end
- def TV.series
- Dir.new(LOCATION).visible_entries.collect {|serie_name| serie_name.downcase }
- end
- def TV.init_from_file( file )
- file_name = File.basename( file ).downcase
- TV.series.each do |serie_name|
- return TV.new(serie_name, file) if TV.valid_video_file?(file_name) && file_name.contains?(serie_name.tr(' ','.'))
- end
- return nil
- end
- def TV.valid_video_file?(file)
- file = file.downcase
- EXTENSIONS.each do |extension|
- return true if file.contains?('.' + extension) && !file.contains?("sample")
- end
- return false
- end
- end
- Dir.new('$HOME/Torrents/').video_files.each do |file_name|
- serie = TV.init_from_file( file_name )
- if serie
- puts "#{File.basename(file_name)} identified as #{serie.name.camelize}..."
- serie.move
- else
- puts "#{File.basename(file_name)} not identified"
- end
- end
Add Comment
Please, Sign In to add comment