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

Ruby: Rename all files within a user given directory from .txt to text

在此提供一些帮助将不胜感激。目标是将用户在 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) 您没有调用 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



p.s。普通用户只需调用:

rename -S .txt .text /path/to/files/*.txt

或:

rename -S .txt .text ./*.txt