我有一个文件层次结构,一些子目录是相对符号链接(symbolic link)。我正在使用 Ruby's Find.find
爬取这些目录并找到一些特定文件。但是,它不会查看任何作为符号链接(symbolic link)的目录(它跟随作为符号链接(symbolic link)的文件)。
查看 source code看来问题是因为它正在使用 File.lstat(file).directory?
来测试某物是否是目录。这对符号链接(symbolic link)返回 false
但 File.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/