使用 Ruby 系统地更改目录中的文件名

问题描述 投票:0回答:3

我想抓取特定目录中的所有文件,然后将 gsub(/abc/,'z') 应用于所有文件名,并实质上以新文件名重新保存文件,我该怎么做?

我一直在查看文件,但似乎没有它所需的任何参数,即文件名等。

M

ruby file-io naming
3个回答
2
投票

2
投票

戴夫的回答是正确的。这是一个例子:

Dir.glob("*.rb").each do |fname|
  File.rename(fname, fname.gsub(/\.rb/,".rbb"))
end

Dir.glob
允许您根据某些给定条件选择文件,但就像 Dave 所说,您也可以使用
Dir.entries
Dir.foreach


0
投票

小心那里。

Dir.foreach
有时会获取那些新重命名的文件。我没有找到任何记录此问题的文档或问题,但这就是我所面临的。
在您的用例中,没有太大区别,因为规则不适合,重命名后不会再次重命名。但 IMO 最好将这些文件名提取到静态列表中,并在稍后的循环中重命名它们,以防止意外行为。
例如:

# Bad
Dir.foreach('path/to/directory') do |path|
  File.rename(path, path.gsub(/abc/, 'z'))
end

# Good
filenames = []
Dir.foreach('path/to/directory') do |path|
  filenames << path
end

filenames.each do |name|
  File.rename(name, name.gsub(/abc/, 'z'))
end
© www.soinside.com 2019 - 2024. All rights reserved.