Ruby 递归地将所有文件夹和文件名转换为小写或大写
我有一个文件夹结构,如下所示。Ruby 递归地将所有文件夹和文件名转换为小写或大写,ruby,Ruby,我有一个文件夹结构,如下所示。 -福 -包 Rose.TXT -酒吧 JaCk.txt 我需要以下输出 -福 -包 rose.txt -酒吧 jack.txt 我知道您需要ruby代码,但我为您提供了一个在shell中运行的一行程序: for i in `find * -depth`; do (mv $i `echo $i|tr [:upper:] [:lower:]`); done 如图所示: 运行它一次,它就会成功 更新 Ruby代码: Dir.glob("./**/*").each
-福
-包
Rose.TXT
-酒吧
JaCk.txt
我需要以下输出
-福
-包
rose.txt
-酒吧
jack.txt
我知道您需要ruby代码,但我为您提供了一个在shell中运行的一行程序:
for i in `find * -depth`; do (mv $i `echo $i|tr [:upper:] [:lower:]`); done
如图所示:
运行它一次,它就会成功
更新
Ruby代码:
Dir.glob("./**/*").each do |file|
File.rename(file, file.downcase) #or upcase if you want to convert to uppercase
end
递归目录列表: 大写/小写转换: 享受:)你只需要一点点:
require 'find'
Find.find(directory) do |path|
if(path != '.' && path != '..')
File.rename(path, path.downcase)
end
end
如果要递归重命名文件,可以使用
***
folder = "/home/prince"
Dir["#{folder}/**/*"].each {|file| File.rename(file, file.downcase)}
如果只希望文件数组以小写形式输出
Dir["#{folder}/**/*"].map(&:downcase)
接受的答案不起作用:当它尝试先转换目录,然后再转换该目录中的文件时 以下是有效的代码:
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
(它按长度对列表进行排序,因此目录将在其中的文件之后转换)谢谢@Mike。我已经知道shell脚本了。但是,我需要ruby中的代码。谢谢你的帮助<代码>系统(“对于i infind*-depth
;do(mv$i
echo$i | tr[:upper:[:lower:);done”)
:)@Rein,是的,我也知道诀窍工作。可以通过RUby吗?。请告诉我ruby代码。谢谢,谢谢@SpyrosP。这不是我问题的正确答案。请再读一遍我的问题,为什么不呢?您需要一个目录列表和一种转换upper->lower和viceversa的方法。这两个参考资料描述了如何做到这两个方面。组合它们只需几分钟。您需要像“/foo/bag/rose.txt”这样的文件名还是需要数据结构?不,我只需要将文件夹和文件转换为小写或大写。我不需要返回任何类型的结构。
folder = "/home/prince"
Dir["#{folder}/**/*"].each {|file| File.rename(file, file.downcase)}
Dir["#{folder}/**/*"].map(&:downcase)
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