简体   繁体   English

如何使用Dir.glob匹配多个模式?

[英]How to match multiple patterns with Dir.glob?

In my Rails app I am trying to collect the paths to all the files contained in two different directories using Dir.glob . 在我的Rails应用程序中,我试图使用Dir.glob收集包含在两个不同目录中的所有文件的路径。

The following code works but is not very concise. 以下代码有效,但不是很简洁。 Isn't there a way two match two patterns at once with Dir.glob ? 是不是有两种方式可以同时使用Dir.glob匹配两种模式?

common_file_paths = Dir.glob("app/assets/mystuff/*").reject do |path|
  File.directory?(path)
end

more_file_paths = Dir.glob("app/assets/mystuff/more/*").reject do |path|
  File.directory?(path)
end

file_paths = common_file_paths + more_file_paths

Dir.glob也接受一系列模式。

Dir.glob(["app/assets/mystuff/*", "app/assets/mystuff/more/*"])

this should do it for you .. tested it in my local machine and it works as expected. 这应该为你做..在我的本地机器测试它,它按预期工作。

lets say , you have the following directory and subdirectory : 比方说,你有以下目录和子目录:

z$ find deletpractic/
deletpractic/
deletpractic/sub_dir
deletpractic/sub_dir/file1_in_subdir.txt
deletpractic/sub_dir/file2_in_subdir.txt
deletpractic/text1
deletpractic/text2
deletpractic/text3
deletpractic/text4
deletpractic/text5
deletpractic/text6
deletpractic/text7

it pretty much boils down to this Dir.glob("/mydir/**/*") 它几乎归结为这个Dir.glob("/mydir/**/*")

[za]$ /usr/bin/ruby -rpp -e 'common_file_paths =    Dir.glob("/dev/deletpractic/**/*").reject do |path|   File.directory?(path) end ; pp common_file_paths'

Output : 输出:

["/dev/deletpractic/sub_dir/file1_in_subdir.txt",
 "/dev/deletpractic/sub_dir/file2_in_subdir.txt",
 "/dev/deletpractic/text1",
 "/dev/deletpractic/text2",
 "/dev/deletpractic/text3",
 "/dev/deletpractic/text4",
 "/dev/deletpractic/text5",
 "/dev/deletpractic/text6",
 "/dev/deletpractic/text7"]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM