问题描述
我必须重命名位于远程存储中的大约5000个文件夹。运行Dir['**/*/']
返回错误“ *** stack smashing detected ***
”,并邀请我报告在解释过程中可能发生的错误(请参见bug report)
如果有帮助的话,这是我计划运行的脚本(尽管它非常适合我的需求,但可以在测试环境中正常运行)
#!/usr/bin/env ruby
# Fetch root directories
dirs = Dir['**/*/'].select { |d| d =~ /\d([\.-]{1}\d{2,})?/ }
# Order subdirectories first
dirs = dirs.sort_by { |d| d.count('/') }.reverse
# Substitute "." and "-" placed after the last "/" with "_"
dirs.each do |dir|
File.rename(dir,dir.gsub(/[\.-](?!.*\/.*)/,'_'))
end
是否有缓解此问题的建议?
解决方法
这既不是形式合理的问题,也不是通用的答案,但我设法通过指定要研究的深度来解决该问题。具体来说,我将Dir['**/*/']
替换为Dir['*/*/*/*/']
。
但是,我愿意接受其他建议,因为其他人可能会遇到类似的问题,而无法对要深入研究的问题进行硬编码。