我正试图在给定文件夹中搜索给定类型(例如.pdf)的所有文件,并将它们复制到新文件夹中。我需要做的是指定一个根文件夹,并搜索该文件夹及其所有子文件夹中的任何与给定类型(.pdf)相匹配的文件。任何人都可以给我一个关于如何搜索根文件夹的子文件夹及其子文件夹等的手。这听起来像一个递归的方法会在这里做的伎俩,但我不能正确实施一个? (顺便说一句,我正在用ruby实现这个程序)。在某个文件夹及其所有子文件夹中搜索特定类型的文件
回答
您需要Find模块。 Find.find
需要一个包含路径的字符串,并将父路径以及每个文件和子目录的路径传递给一个伴随块。一些示例代码:
require 'find'
pdf_file_paths = []
Find.find('path/to/search') do |path|
pdf_file_paths << path if path =~ /.*\.pdf$/
end
这将递归搜索的路径,并存储在数组中以.pdf结尾的文件名。
试试这个:
Dir.glob("#{folder}/**/*.pdf")
这是一样的
Dir["#{folder}/**/*.pdf"]
当文件夹变量是路径要通过搜索的根文件夹。
作为一个小的改进上面Jergason和马特的答案,这里是你如何能凝结成单行:
pdf_file_paths = Find.find('path/to/search').select { |p| /.*\.pdf$/ =~ p }
它使用查找方法同上,但利用的事实,结果是一个枚举(并且因此我们可以使用select)来获得与该组匹配的阵列
如果速度是问题,则优选Dir.glob
而不是Find.find
。
Warming up --------------------------------------
Find.find 124.000 i/100ms
Dir.glob 515.000 i/100ms
Calculating -------------------------------------
Find.find 1.242k (± 4.7%) i/s - 6.200k in 5.001398s
Dir.glob 5.249k (± 4.5%) i/s - 26.265k in 5.014632s
Comparison:
Dir.glob: 5248.5 i/s
Find.find: 1242.4 i/s - 4.22x slower
require 'find'
require 'benchmark/ips'
dir = '.'
Benchmark.ips do |x|
x.report 'Find.find' do
Find.find(dir).select { |f| f =~ /\*\.pdf/ }
end
x.report 'Dir.glob' do
Dir.glob("#{dir}/**/*\.pdf")
end
x.compare!
end
使用ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin15]
谢谢你的帖子。对于像我这样的初学者来说,找出在Dir.glob和Find.find之间应该使用哪种方法是非常有用的。 – itsh 2016-09-14 18:15:19
在这种情况下查找速度应该比较慢,因为您使用的是正则表达式。另一方面,Dir.glob并不像正则表达式那样强大,所以我期望它更快。 – hirowatari 2017-08-18 20:39:51
- 1. 定位文件夹及其所有子文件夹/子文件夹
- 2. vba搜索一个文件夹及其子文件夹内的所有文件中的字符串
- 3. 如何删除文件夹及其子文件夹内的所有空文件?
- 4. Py在文件夹和子文件夹中搜索文件
- 5. 替换文件夹中所有文件中的某些字符及其子文件夹
- 6. 如何为特定文件夹及其所有文件夹向上chmod
- 7. 在Delphi中隐藏文件夹中搜索文件夹和特定文件
- 8. 在Objective-C/C中删除文件夹及其子文件夹
- 9. 搜索特定的文件夹不限于该文件夹
- 10. 与vb.net,有没有办法找到一个文件夹及其子文件夹中的所有压缩文件?
- 11. 搜索由指定的文件夹/子文件夹
- 12. 创建一个文件夹及其子文件夹
- 13. 批量编程搜索子文件夹中的某些文件
- 14. 循环遍历文件夹及其子文件夹的特定列表VBA宏
- 15. 重定向所有子文件夹请求到一个特定的文件夹
- 16. JarScan扫描所有子文件夹中的特定类的所有JAR文件
- 17. 递归搜索系统中的所有文件夹和子文件夹
- 18. 编译自定文件夹中的所有文件,手写笔及其子
- 19. 忽略除特定文件夹(和所有子文件夹)内的文件类型?
- 20. 在文件夹中搜索字符串的所有文件
- 21. 如何从根文件夹及其所有子文件夹生成目录树?
- 22. 列出Google Drive SDK中的所有文件夹及其文件
- 23. 存档文件夹时文件夹中有某些文件类型
- 24. Android Count no。在一个文件夹及其子文件夹中的图像
- 25. 删除许多文件夹和子文件夹中的特定文件夹
- 26. 从某个文件夹中删除所有文件和文件夹
- 27. 的.htaccess拒绝所有子文件夹指定文件夹
- 28. 的Excel VBA搜索文件夹和子文件夹,并返回多个文件
- 29. std :: experimental :: filesystem :: recursive_directory_iterator跳过文件夹及其子文件夹
- 30. 搜索文件夹中的特定文件
方法是正确的,但执行是错误的。它需要是Dir.glob('**/*。pdf') – jergason 2010-08-17 17:40:25
我认为OP想要递归,不是吗? – rogerdpack 2012-07-19 19:43:55
最初的回答(rogerdpack)为我工作,但Jergason's没有,我害怕。 – Joyce 2013-03-07 23:00:11