ruby - 如何使 Ruby 的 Find.find 遵循符号链接(symbolic link)?

标签 ruby find symlink

我有一个文件层次结构,一些子目录是相对符号链接(symbolic link)。我正在使用 Ruby's Find.find爬取这些目录并找到一些特定文件。但是,它不会查看任何作为符号链接(symbolic link)的目录(它跟随作为符号链接(symbolic link)的文件)。

查看 source code看来问题是因为它正在使用 File.lstat(file).directory? 来测试某物是否是目录。这对符号链接(symbolic link)返回 falseFile.stat.directory? 返回 true

如何让 Find.find 跟随符号链接(symbolic link),而不是猴子修补它以使用 File.stat 而不是 File.lstat

最佳答案

我遇到了类似的情况,并决定在没有额外 gem 的情况下遵循真正的道路。

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")

这种方式无法保留带有符号链接(symbolic link)的原始路径,但目前对我来说没问题。

关于ruby - 如何使 Ruby 的 Find.find 遵循符号链接(symbolic link)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3974087/

相关文章:

ruby - IO::EAGAINWaitReadable:资源暂时不可用 - 读取会阻塞

ruby-on-rails - 有没有办法使 before_save 成为条件?

ruby - 元编程 : output method body as text

ruby-on-rails - 如何将查询参数放在_pathrails_helper上

eclipse - 搜索 Eclipse 中的所有类?

Linux根据usb口执行脚本

regex - Notepad++,搜索之间有通配符的字符串。除非(角色)出现在

node.js - Mongoose find 返回空数组(适用于其他集合)

powershell:错误的符号链接(symbolic link)解析

ruby - 尝试通过 RUBY Fileutils 复制对象(而不是链接)