我有一个像下面这样的文件夹结构。
-FOO
-BAG
Rose.TXT
-BAR
JaCk.txt
我需要以下输出。
-foo
-bag
rose.txt
-bar
jack.txt
答案 0 :(得分:8)
我意识到你想要红宝石代码,但是我会向你展示一个在你的shell中运行的衬垫:
for i in `find * -depth`; do (mv $i `echo $i|tr [:upper:] [:lower:]`); done
在此处找到:http://ubuntuforums.org/showthread.php?t=244738
运行一次,它应该可以解决问题。
Ruby代码:
Dir.glob("./**/*").each do |file|
File.rename(file, file.downcase) #or upcase if you want to convert to uppercase
end
答案 1 :(得分:2)
Dir["**/*"].each {|f| File.rename(f, f.downcase)}
答案 2 :(得分:0)
递归目录列表:
http://www.mustap.com/rubyzone_post_162_recursive-directory-listing
大写/小写转换:
http://www.programmingforums.org/thread5455.html
享受:)
答案 3 :(得分:0)
您需要的只是Find.find:
require 'find'
Find.find(directory) do |path|
if(path != '.' && path != '..')
File.rename(path, path.downcase)
end
end
答案 4 :(得分:0)
如果要以递归方式重命名文件,可以使用**/*
folder = "/home/prince"
Dir["#{folder}/**/*"].each {|file| File.rename(file, file.downcase)}
如果您只想以小写
输出文件数组Dir["#{folder}/**/*"].map(&:downcase)
答案 5 :(得分:0)
接受的答案不起作用:当它首先尝试转换目录然后转换该目录中的文件时。
以下是可行的代码:
Dir.glob("./**/*").sort{|x| x.size}.each do |name|
x = name.split('/')
newname = (x[0..-2] + [x[-1].downcase]).join('/')
File.rename(name, newname)
end
(它按长度对列表进行排序,因此将在其中的文件后转换该目录)