获取 Ruby 中文件的相对路径

get relative paths to files in ruby

提问人:Aditya Bhat 提问时间:9/12/2014 最后编辑:StefanAditya Bhat 更新时间:2/28/2022 访问量:1291

问:

我的文件夹结构如下:

.
└── FolderA
    ├── a.cpp
    ├── b.cpp
    ├── c.cpp
    ├── FolderB
    │   ├── trial.cpp
    │   └── trial1.cpp
    └── FolderC
        └── srcFolder
            └── anothercppfile.cpp

我想将数组中存在的所有文件的名称存储起来。我必须确保保留内部文件夹中存在的文件的相对路径。.cppFolderAFolderA

我可以使用:

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赞 Arup Rakshit 9/12/2014
你的问题还不是很清楚。.你能画一棵FS树并告诉我们确切的输出吗?这将有助于我们自信地帮助您?

答:

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