微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使Ruby的Find.find遵循符号链接?

我有一个文件层次结构,一些子目录是相对符号链接.我正在使用 Ruby’s Find.find来浏览这些目录并找到一些特定的文件.但是,它不会查看任何符号链接的目录(它遵循符号链接文件).

看看source code似乎问题是因为它使用的是File.lstat(文件).directory?测试某些东西是否是目录.这对符号链接返回false但File.stat.directory?返回true.

如何使Find.find跟随符号链接,缺少猴子修补它以使用File.stat而不是File.lstat?

解决方法

我遇到了类似的情况,并决定遵循真正的道路,没有额外的宝石.
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")

这种方式不能保持带有符号链接的原始路径,但此刻对我来说还不错.

原文地址:https://www.jb51.cc/ruby/269933.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐