我想抓取特定目录中的所有文件,然后将 gsub(/abc/,'z') 应用于所有文件名,并实质上以新文件名重新保存文件,我该怎么做?
我一直在查看文件,但似乎没有它所需的任何参数,即文件名等。
M
戴夫的回答是正确的。这是一个例子:
Dir.glob("*.rb").each do |fname|
File.rename(fname, fname.gsub(/\.rb/,".rbb"))
end
Dir.glob
允许您根据某些给定条件选择文件,但就像 Dave 所说,您也可以使用 Dir.entries
或 Dir.foreach
小心那里。
Dir.foreach
有时会获取那些新重命名的文件。我没有找到任何记录此问题的文档或问题,但这就是我所面临的。# 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