All pastes #24042 Raw Edit

Untitled

public ruby v1 · immutable
#24042 ·published 2005-09-27 17:03 UTC
rendered paste body
#!/usr/bin/ruby# $*.each {|x| puts(x)}# ©2003 Andrew Jones	#Usage: descent-linker <target directory for new links> <directory 1> <directory 2> ... <directory n># Objectives: # 1. Take a list of directories to build on command line# 2. make a directory "dirname.links" for each directory on command line# 3. populate with subdirectories for each album and so on.module Descent  # init  # calls safe_mkdir for command line entries, creates <foo>.links for each.  def Descent.init    #@targets = $*    #@targets.each {|argument| safe_mkdir( target )}    safe_mkdir( $*[0] )  end  # safe_mkdir  # makes directories and catches already-existing-directory errors  def Descent.safe_mkdir( dirname )    begin      Dir.mkdir( dirname )    rescue Errno::EEXIST      #puts( dirname + " exists; not creating" )    end  end    def Descent.handle_file( dirname_original, filename, dirname_target )    if filename == "."      puts("Doing nothing for '.'")    elsif filename == ".."      puts("Doing nothing for '..'")    else      stuff = filename.split(pattern=" - ")      artist = stuff[0]      album = stuff[1]      safe_mkdir( dirname_target + "/" + artist )      	if filename == ".links"		puts("Doing nothing for an annoying bug; tough shit.")		return	else		begin			safe_mkdir( dirname_target + "/" + artist + "/" + album)		rescue TypeError			puts("Bad file name:")			puts("#{dirname_target} #{artist} #{album}")			puts("#{filename}")			return		end	end      begin	#File.link( dirname_original + "/" + filename , dirname_target + "/" + artist + "/" + album + "/" + stuff[2..-1].join(" - "))	`ln -s "#{dirname_original + "/" + filename}" "#{ dirname_target + "/" + artist + "/" + album + "/" + stuff[2..-1].join(" - ")}"`	puts("Linking #{filename}, exit status #{$?}")      rescue SystemCallError	#puts("Doing nothing for #{filename}")	return      end    end  end    # parse_directory  # real  def Descent.parse_directory( dirname_original, dirname_target )    original = Dir.new( dirname_original )    #dirname_target = dirname_original + ".links"    puts("Processing directory #{dirname_original}; creating links in #{dirname_target}")    original.each { |filename| handle_file( dirname_original, filename, dirname_target ) }    original.close  endendif $*.length < 2  puts("Usage: descent-linker <target directory for new links> <directory 1> <directory 2> ... <directory n>")  exitendDescent.init()$*[1..-1].each {|argument| Descent.parse_directory( argument, $*[0] )}