Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- #http://pastebin.com/KSS0zU2F
- unless ARGV.count == 1
- abort("Merges sequentially-named files.")
- end
- outfile = ARGV.first.sub(/.?\d+\z/, "")
- if File.size? outfile
- abort("The outfile already exists.")
- end
- pattern = ARGV.first.sub(/\d+\z/, "")
- pattern.gsub!(/[\[\]\*\{\}]/, "\\\\\\0")
- if digits = ARGV.first[ /\d+\z/ ]
- pattern.concat("[0-9]" * digits.length)
- else
- pattern.concat(".[0-9]*")
- end
- files = Dir.glob(pattern).sort
- if files.count < 2
- abort("There needs to be at least 2 files.")
- end
- if files.first[ /\d+\z/ ].to_i != 1
- abort("The first file in the series is missing.")
- end
- file_count = files.last[ /\d+\z/ ].to_i
- unless files.count == file_count
- abort("%s of %s files are missing." % [
- file_count-files.count, file_count
- ])
- end
- unless size = File.size?(files.first)
- abort("\"%s\" is empty." % files.first)
- end
- if File.size?(files.first) == File.size?(files.last)
- abort("One or more files seem to be missing.")
- end
- files.slice(0..-2).each do |path|
- size == File.size?(path) and next
- abort("\"%s\" has an incorrect size." % file)
- end
- File.open(outfile, 'w') do |outstream|
- files.each do |path|
- puts("Merging \"%s\"" % path)
- File.open(path) do |instream|
- IO.copy_stream(instream, outstream)
- end
- end
- outstream.fsync
- end
- files.each(&File.method(:unlink))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement