假設你想找到所有的.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文件和文件stackov)
[[email protected] 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"
# ]
的主要問題是如何將這種兩個部分連接起來。 例如,我嘗試搜索文件,部分*在其名稱stackov * - 這是第一準則。而在同一時間需要獲得所有* stackov *文件不在於更深層次的有3子文件夾(例如)主目錄內的 - 第二個標準。 –
我編輯了我的答案。 –
非常感謝! –