I have been trying to work out a file rename program based on ruby, as a programming exercise for myself (I am aware of rename under linux, but I want to learn Ruby, and rename
Slightly modified version:
puts "Enter the file search query"
searchPattern = gets.strip
puts "Enter the target to replace"
target = gets.strip
puts "Enter the new target name"
newTarget = gets.strip
Dir.glob(searchPattern).sort.each do |entry|
if File.basename(entry, File.extname(entry)).include?(target)
newEntry = entry.gsub(target, newTarget)
File.rename( entry, newEntry )
puts "Rename from " + entry + " to " + newEntry
end
end
Key differences:
.strip
to remove the trailing newline that you get from gets
. Otherwise, this newline character will mess up all of your match attempts.glob
call instead of globbing for everything and then manually filtering it later.entry
(that is, the complete filename) in the calls to gsub
and rename
instead of origin
. origin
is really only useful for the .include?
test. Since it's a fragment of a filename, it can't be used with rename
. I removed the origin
variable entirely to avoid the temptation to misuse it.For your example folder structure, entering *.jpg
, a
, and b
for the three input prompts (respectively) should rename the files as you are expecting.