这里的一些帮助将不胜感激。目标是从ruby中的用户输入目录将所有.txt文件重命名为.text。我必须使用fileutils作为要求。当我运行当前脚本时,我没有收到任何错误。但是,没有任何事情发生......我确定你们中的一个人可能会帮助我查明问题。
#!/usr/bin/ruby
#This program was written by me
puts “what directory would you like to change? “
require 'fileutils'
pathname = gets.chomp
def rename(pathname)
currentdir = Dir.new('.')
newfile = FileTest.exists?(pathname.to_s)
if pathname != "q"
if newfile == "true"
require 'fileutils'
newfile.each do |f|
FileUtils.mv "#{File.dirname(f)}/#{File.basename(f, '.*')}.txt", "#{File.dirname(f)}/#{File.basename(f,'.*')}.text"
end
elsif currentdir
require 'fileutils'
(currentdir).each do |f|
FileUtils.mv "#{File.dirname(f)}/#{File.basename(f, '.*')}.txt", "#{File.dirname(f)}/#{File.basename(f,'.*')}.text"
end
else
puts "Invalid Path"
end
end
end
编辑:我想我现在知道这个问题,但不知道在哪里放置代码。我需要cd到用户输入的目录,这应该是我只能更改主目录中的.txt文件的原因。
此问题与建议的评论之一不同,因为要求是使用fileutils并让用户输入他们想要编辑的目录。此条目从ANYWHERE查找文件名,不使用fileutils
答案 0 :(得分:0)
据我的代码所知,
1)您没有调用rename
函数
2)您的rename
函数无法检查newfile
,currentdir
- 如果您想要从当前目录执行,则会理解“。”符号并将在当前目录中执行glob。
我已将pathname != "q"
移到rename
之外,因为重命名必须重命名,没有别的。
所以最终代码:
#!/usr/bin/ruby
#This program was written by me
require 'fileutils'
def rename(pathname)
if File.directory?(pathname.to_s)
puts "renaming files in path"+pathname.to_s
Dir.glob(File.dirname(pathname.to_s)+"/*.txt").each do |f|
FileUtils.mv f, "#{File.dirname(f)}/#{File.basename(f,'.*')}.text"
puts "#{File.basename} => #{File.basename(f,'.*')}.text"
end
else
puts "Invalid Path"
end
end
puts "what directory would you like to change? "
pathname = gets.chomp
if pathname != "q"
rename(pathname)
end
附:普通用户只需致电:
rename -S .txt .text /path/to/files/*.txt
或:
rename -S .txt .text ./*.txt