Ruby:将用户给定目录中的所有文件从.txt重命名为text

时间:2016-11-17 23:39:09

标签: ruby fileutils

这里的一些帮助将不胜感激。目标是从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

1 个答案:

答案 0 :(得分:0)

据我的代码所知,

1)您没有调用rename函数

2)您的rename函数无法检查newfilecurrentdir - 如果您想要从当前目录执行,则会理解“。”符号并将在当前目录中执行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