Skip to content

Instantly share code, notes, and snippets.

@Coro365

Coro365/reg_rename.rb

Last active Aug 24, 2016
Embed
What would you like to do?
file name edit in regular expression
require "find"
Dir[File.dirname(__FILE__) + "/com_lib/*.rb"].each {|file| require file}
def yesno?(ms = "")
blue "#{ms}\nPlease press y/n\n> "
i = STDIN.gets
if /^y$|^Y$|^yes$|^Yes$|^YES$/ =~ i
return true
elsif /^n$|^N$|^no$|^No$|^NO$/ =~ i
return false
else
yesno?()
end
end
def blue ms
print "\e[35m" + ms + "\e[0m"
end
def user_ask
print "Regexp\n> "
patt = Regexp.new(STDIN.gets.chomp)
print "Replace str or Empty str or \"extract\"\n> "
repl = STDIN.gets.chomp
return patt, repl
end
def replace file_path
file_name = File.basename(file_path)
if file_name.match(PATT)
puts file_name
new_file_path = WD + "/" + file_name.gsub(PATT,REPL).to_s
puts File.basename(new_file_path)
$paths.push([file_path, new_file_path])
puts ""
end
end
def extract file_path
file_name = File.basename(file_path)
extension = File.extname(file_path)
extension = "" if extension.size > 4
if new_file_name = file_name.match(PATT)
puts file_name
new_file_path = WD + "/" + new_file_name[1].to_s + extension
puts File.basename(new_file_path)
$paths.push([file_path, new_file_path])
puts ""
end
end
def execute
$paths.each do |path|
crnt_path, new_path = path
File.rename(crnt_path, new_path)
end
end
PATT, REPL = user_ask
$paths = Array.new
ARGV[0].nil? ? WD=Dir.pwd : WD=ARGV[0]
print("Regexp: ")
p PATT
print("Replac: #{REPL}\n")
print("Dircty: #{WD}\n\n")
Find.find(WD) do |file_path|
next if File.basename(file_path) == ".DS_Store"
next if File.basename(file_path) == File.basename(WD)
if REPL == "extract"
unless $displayed
puts "! EXTRACT !"
$displayed = true
end
extract file_path
else
replace file_path
end
end
if yesno?("Execute?")
execute
puts "Done"
else
puts "Canceled"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.