我正在尝试设置文件夹并定义子文件夹搜索的深度,以查找指定模式下文件夹和子文件夹中的所有文件。
类似的东西:
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
答案 0 :(得分:0)
假设您要查找所有 .zip 文件(在数组中返回)。
如果要搜索任何给定的文件夹(带递归)
require 'find'
arr = []
Find.find('/home') do |p|
arr << p if p =~ /.zip$/
end
arr
以特定深度搜索
b = 2
path = "/home#{'/*' * b}/*.zip"
Dir.glob(path)
修改强>
我有以下4个级别的树,其中两个文件分布在随机文件夹中( stackov-file 和 file-stackov )
[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
我可以使用以下代码查找最高级别的所有文件(使用所需的数字更改x.times
)。
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"
# ]