arn*_*nab 10 ruby symlink find
我有一个文件层次结构,一些子目录是相对符号链接.我正在使用RubyFind.find来抓取这些目录并找到一些特定的文件.然而,它不会查看任何符号链接的目录(它遵循符号链接的文件).
看看源代码似乎问题是因为它File.lstat(file).directory?用于测试某些东西是否是目录.这将返回false符号链接但File.stat.directory?返回true.
我如何制作Find.find跟随符号链接,缺少猴子修补它File.stat而不是File.lstat?
小智 6
我遇到了类似的情况,并决定遵循真正的道路,没有额外的宝石.
require 'find'
paths = ARGV
search_dirs = paths.dup
found_files = Array.new
until search_dirs.size == 0
Find.find( search_dirs.shift ) do |path|
if File.directory?( path ) && File.symlink?( path )
search_dirs << File.realdirpath( path )
else
found_files << path
end
end
end
puts found_files.join("\n")
Run Code Online (Sandbox Code Playgroud)
这种方式不能保持带有符号链接的原始路径,但此刻对我来说还不错.
对于其他观看的人,我最终使用了Pathname以下递归代码:
def all_files_under(*paths)
paths.flatten!
paths.map! { |p| Pathname.new(p) }
files = paths.select { |p| p.file? }
(paths - files).each do |dir|
files << all_files_under(dir.children)
end
files.flatten
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2317 次 |
| 最近记录: |