【问题标题】:Ruby: Rename all files within a user given directory from .txt to textRuby:将用户给定目录中的所有文件从.txt重命名为文本
【发布时间】:2016-11-17 23:39:08
【问题描述】:

我们将不胜感激。目标是将所有 .txt 文件从用户输入的 ruby​​ 目录重命名为 .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 文件的原因。

这个问题与建议的 cmets 之一不同,因为要求是使用 fileutils 并让用户输入他们想要编辑的目录。此条目从 ANYWHERE 查找文件名,并且不使用 fileutils

【问题讨论】:

  • 可能是因为您从未真正调用过rename 方法吗?
  • 虽然不一样。要求是使用 fileutils 并让用户输入他们想要编辑的目录。此条目从 ANYWHERE 查找文件名,并且不使用 fileutils

标签: ruby fileutils


【解决方案1】:

据我了解您的代码,

1) 你没有调用rename 函数

2) 您的rename 函数对newfilecurrentdir 进行了不必要的检查 - 如果您想从当前目录执行,它将理解“。”符号并将在当前目录中执行 glob。



我已将 pathname != "q" 移至 rename 之外,因为 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

【讨论】:

  • 刚开始时遇到了同样的问题。我运行脚本,没有任何反应。虽然没有错误。但是,如果路径无效,它会提醒我。它以前没有这样做。
  • 你能写出你如何调用脚本以及你作为路径传递的内容吗?
  • 还要确保在您定义的路径中存在具有该扩展名的文件
  • 我不知道发生了什么,但是当我做主目录时它可以工作(有时)。当我在子目录上做它时,它根本不工作,但它不是给我一个错误。如果我输入不是目录的内容,它确实会将其称为无效路径。
  • 我已经更新了我的答案,它将输出操作的路径和进度(参见 puts)。希望它能为您提供正在发生的事情的信息。
猜你喜欢
  • 2014-10-14
  • 2011-11-19
  • 1970-01-01
  • 2014-05-16
  • 2021-03-02
  • 2010-12-29
  • 1970-01-01
  • 2018-10-23
  • 2015-02-28
相关资源
最近更新 更多