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
函数对 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
p.s。普通用户只需调用:
rename -S .txt .text /path/to/files/*.txt
或:
rename -S .txt .text ./*.txt
在此提供一些帮助将不胜感激。目标是将用户在 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
函数对 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
p.s。普通用户只需调用:
rename -S .txt .text /path/to/files/*.txt
或:
rename -S .txt .text ./*.txt