我有一个文件夹结构如下:
.
└── 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"]
答案 0 :(得分:6)
您可以使用Dir.glob
:
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
请注意,路径是相对的,即它们不以/
开头。将块传递给chdir
可确保之后恢复当前目录(感谢Arup Rakshit)。