94 lines
2.0 KiB
Ruby
Executable File
94 lines
2.0 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require "fileutils"
|
|
|
|
MUSIC_DIR = "/pegasus/pub/music/artists"
|
|
ARTISTS = <<EOS.split("\n").map(&:strip).sort
|
|
All That Remains
|
|
Avenged Sevenfold
|
|
Falling in Reverse
|
|
Fear Factory
|
|
Five Finger Death Punch
|
|
Godsmack
|
|
In Flames
|
|
Korn
|
|
Lamb of God
|
|
Linkin Park
|
|
Machine Head
|
|
Mudvayne
|
|
POD
|
|
Slipknot
|
|
Staind
|
|
Static-X
|
|
System of a Down
|
|
The Goo Goo Dolls
|
|
The Offspring
|
|
Tool
|
|
Trivium
|
|
EOS
|
|
MOUNT_DIR = "/tmp/mk-usb-car-music"
|
|
|
|
def run(*cmd)
|
|
puts cmd.map {|p| "'#{p}'"}.join(" ")
|
|
system(*cmd) or raise
|
|
end
|
|
|
|
def main(args)
|
|
if args.find {|a| %w[-h --help].include?(a)}
|
|
puts <<EOS
|
|
Usage: #{$0}
|
|
-h, --help Show this help and exit
|
|
-s Show folder sizes and exit
|
|
-d DEV Set USB device
|
|
EOS
|
|
return 0
|
|
end
|
|
if args.find {|a| a == "-s"}
|
|
run("du", "-shc", *ARTISTS.map {|a| "#{MUSIC_DIR}/#{a}"})
|
|
return 0
|
|
end
|
|
device = ""
|
|
args.each_with_index do |arg, i|
|
|
if arg =~ /^-d(.*)$/
|
|
device = $1
|
|
if device == "" and args.length > (i + 1)
|
|
device = args[i + 1]
|
|
end
|
|
end
|
|
end
|
|
if device == ""
|
|
$stderr.puts "Specify device."
|
|
return 1
|
|
end
|
|
run(*%W[sudo mkfs.vfat -n JOSHMUSIC #{device}]) or raise
|
|
FileUtils.rm_rf(MOUNT_DIR)
|
|
FileUtils.mkdir(MOUNT_DIR)
|
|
run(*%W[sudo mount #{device} #{MOUNT_DIR} -o uid=#{`whoami`.chomp}]) or raise
|
|
begin
|
|
ARTISTS.each do |artist|
|
|
src = "#{MUSIC_DIR}/#{artist}"
|
|
dest = "#{MOUNT_DIR}/#{artist}"
|
|
src_folders = Dir["#{src}/*"].select do |path|
|
|
File.directory?(path)
|
|
end.sort
|
|
FileUtils.mkdir(dest)
|
|
src_folders.each do |src_folder|
|
|
puts "Copying #{src_folder}..."
|
|
dest_folder = "#{dest}/#{File.basename(src_folder)}"
|
|
FileUtils.mkdir(dest_folder)
|
|
src_files = Dir["#{src_folder}/*"].select do |path|
|
|
File.file?(path)
|
|
end.sort
|
|
src_files.each do |src_file|
|
|
FileUtils.cp(src_file, dest_folder)
|
|
end
|
|
end
|
|
end
|
|
ensure
|
|
run(*%W[sudo umount #{MOUNT_DIR}]) or raise
|
|
end
|
|
return 0
|
|
end
|
|
|
|
exit(main(ARGV))
|