2016-02-25 103 views
1

我想設置文件夾,並定義搜索是如何深入到子文件夾avaliable,通過指定模式來查找文件夾內的所有文件和文件夾內的模式文件。搜索由指定的文件夾/子文件夾

喜歡的東西:

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

假設你想找到所有的.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" 
# ] 
+0

的主要問題是如何將這種兩個部分連接起來。 例如,我嘗試搜索文件,部分*在其名稱stackov * - 這是第一準則。而在同一時間需要獲得所有* stackov *文件不在於更深層次的有3子文件夾(例如)主目錄內的 - 第二個標準。 –

+0

我編輯了我的答案。 –

+0

非常感謝! –

相關問題