提问人:Aditya Bhat 提问时间:9/12/2014 最后编辑:StefanAditya Bhat 更新时间:2/28/2022 访问量:1291
获取 Ruby 中文件的相对路径
get relative paths to files in ruby
问:
我的文件夹结构如下:
.
└── FolderA
├── a.cpp
├── b.cpp
├── c.cpp
├── FolderB
│ ├── trial.cpp
│ └── trial1.cpp
└── FolderC
└── srcFolder
└── anothercppfile.cpp
我想将数组中存在的所有文件的名称存储起来。我必须确保保留内部文件夹中存在的文件的相对路径。.cpp
FolderA
FolderA
我可以使用:
require 'find'
cpp_file_paths = []
Find.find('path/to/search') do |path|
cpp_file_paths << path if path =~ /.*\.cpp$/
end
但我没有得到相对路径。我不确定如何进行。最终数组必须是:
["a.cpp",
"b.cpp",
"c.cpp",
"/FolderB/trial.cpp",
"/FolderB/trial1.cpp",
"/FolderC/srcFolder/anothercppfile.cpp"]
答:
11赞
Stefan
9/12/2014
#1
您可以使用 Dir.glob
:
从 Ruby 2.5 开始,有一个论点:base
cpp_file_paths = Dir.glob('**/*.cpp', base: 'FolderA')
#=> ["a.cpp", "b.cpp", "c.cpp", "FolderB/trial.cpp", "FolderB/trial1.cpp", "FolderC/srcFolder/anothercppfile.cpp"]
对于较旧的 Rubies,您可以 chdir
进入基本目录:
Dir.chdir('FolderA') do
cpp_file_paths = Dir.glob('**/*.cpp') #=> ["a.cpp", "b.cpp", "c.cpp", "FolderB/trial.cpp", "FolderB/trial1.cpp", "FolderC/srcFolder/anothercppfile.cpp"]
end
请注意,路径是相对的,即它们不以 .传递一个块以确保之后恢复当前目录(感谢 Arup Rakshit)。/
chdir
评论
1赞
Arup Rakshit
9/12/2014
不错的答案!您可以使用 method 传递块。::chdir
评论