Ruby 在指定的文件夹/子文件夹中按模式搜索文件
我正在尝试设置文件夹并定义子文件夹搜索的可用深度,以按指定模式查找文件夹和子文件夹中的所有文件 比如:Ruby 在指定的文件夹/子文件夹中按模式搜索文件,ruby,Ruby,我正在尝试设置文件夹并定义子文件夹搜索的可用深度,以按指定模式查找文件夹和子文件夹中的所有文件 比如: b = 0 while b < searchdeep # here number of subfolders inside $finale = '*'+'/*'*b fileshow = Dir.glob($finale).select {|f| File.file? f} and (some magic with pattern) puts fileshow b +=
b = 0
while b < searchdeep # here number of subfolders inside
$finale = '*'+'/*'*b
fileshow = Dir.glob($finale).select {|f| File.file? f} and (some magic with pattern)
puts fileshow
b += 1
end
b=0
而b
假设要查找所有.zip文件(以数组形式返回)
如果要在任何给定文件夹中搜索(使用递归)
编辑
我有以下4层树,其中两个文件分布在随机文件夹中(stackov文件和stackov文件)
我可以使用以下代码查找达到某一级别的所有文件(使用所需数字更改x.times
)
假设要查找所有.zip文件(以数组形式返回) 如果要在任何给定文件夹中搜索(使用递归) 编辑 我有以下4层树,其中两个文件分布在随机文件夹中(stackov文件和stackov文件) 我可以使用以下代码查找达到某一级别的所有文件(使用所需数字更改
x.times
)
主要问题是如何连接这两个部分。例如,我尝试搜索名称中包含零件stackov的文件-这是第一个条件。同时需要获取所有stackov文件,这些文件位于主目录中的3个子文件夹(例如)之外-第二个条件。主要问题是如何连接这两个部分。例如,我尝试搜索名称中包含零件stackov的文件-这是第一个条件。同时需要获取所有stackov文件,这些文件不位于主目录中的3个子文件夹(例如)的深处-第二个条件。
require 'find'
arr = []
Find.find('/home') do |p|
arr << p if p =~ /.zip$/
end
arr
b = 2
path = "/home#{'/*' * b}/*.zip"
Dir.glob(path)
[root@ip-10-0-0-118 main_folder]# tree
.
├── level_1_a
│ ├── file-stackov
│ ├── level_2_a
│ │ └── level_3_a
│ │ ├── file-stackov
│ │ ├── level_4_a
│ │ │ ├── file-stackov
│ │ │ └── stackov-file
│ │ └── stackov-file
│ └── stackov-file
└── level_1_b
├── level_2_b
│ └── level_3_b
│ └── level_4_b
│ └── stackov-file
└── stackov-file
8 directories, 8 files
1.times.flat_map {|level| Dir.glob("./*#{'/*' *level}/*stackov*")}
# ["./level_1_b/stackov-file", "./level_1_a/file-stackov", "./level_1_a/stackov-file"]
2.times.flat_map {|level| Dir.glob("./*#{'/*' *level}/*stackov*")}
# ["./level_1_b/stackov-file", "./level_1_a/file-stackov", "./level_1_a/stackov-file"]
3.times.flat_map {|level| Dir.glob("./*#{'/*' *level}/*stackov*")}
# [
# "./level_1_b/stackov-file", "./level_1_a/file-stackov", "./level_1_a/stackov-file",
# "./level_1_a/level_2_a/level_3_a/file-stackov", "./level_1_a/level_2_a/level_3_a/stackov-file"
# ]
4.times.flat_map {|level| Dir.glob("./*#{'/*' *level}/*stackov*")}
# [
# "./level_1_b/stackov-file", "./level_1_a/file-stackov", "./level_1_a/stackov-file",
# "./level_1_a/level_2_a/level_3_a/file-stackov", "./level_1_a/level_2_a/level_3_a/stackov-file",
# "./level_1_b/level_2_b/level_3_b/level_4_b/stackov-file", "./level_1_a/level_2_a/level_3_a/level_4_a/file-stackov",
# "./level_1_a/level_2_a/level_3_a/level_4_a/stackov-file"
# ]