如何使用Ruby中的一个命令检查目录/文件/符号链接是否存在

Cla*_*wsy 73 ruby directory symlink file exists

是否有一种方法可以检测目录/文件/符号链接/等.实体(更广义)存在?

我需要一个函数,因为我需要检查一个可能是目录,文件或符号链接的路径数组.我知道File.exists?"file_path"适用于目录和文件,但不适用于符号链接(即File.symlink?"symlink_path").

the*_*Man 133

标准文件模块具有通常的文件测试可用:

RUBY_VERSION # => "1.9.2"
bashrc = ENV['HOME'] + '/.bashrc'
File.exist?(bashrc) # => true
File.file?(bashrc)  # => true
File.directory?(bashrc) # => false
Run Code Online (Sandbox Code Playgroud)

你应该能够找到你想要的东西.


OP:"谢谢,但我需要三个真或假"

显然不是.好的,试试类似:

def file_dir_or_symlink_exists?(path_to_file)
  File.exist?(path_to_file) || File.symlink?(path_to_file)
end

file_dir_or_symlink_exists?(bashrc)                            # => true
file_dir_or_symlink_exists?('/Users')                          # => true
file_dir_or_symlink_exists?('/usr/bin/ruby')                   # => true
file_dir_or_symlink_exists?('some/bogus/path/to/a/black/hole') # => false
Run Code Online (Sandbox Code Playgroud)

  • 它保证不能跨平台工作,因为Windows不知道Bash,因此,关于.bashrc.但它适用于基于*nix的平台.但是`/`的使用不是问题,因为[Ruby的IO在Windows上自动从正斜杠转换为反斜杠](http://ruby-doc.org/core-2.3.3/IO.html). (2认同)

Gin*_*kas 13

为什么不定义自己的功能File.exists?(path) or File.symlink?(path)并使用它?

  • 我发现在编程中过多地忽略细节非常有用.如果您知道解决问题的简单直接方法,那就去做吧.如果你以后找到更好的方法,你可以随时回去修理.在这种情况下,定义新函数是明智的选择. (11认同)
  • 但是,该功能已经内置到语言中并且易于使用.然后它成为一个阅读案例,看看有什么可用并添加呼叫.编写代码来实现已经存在的功能只是因为你没有花时间阅读语言附带的RDoc ......只是没有加起来.通过这种逻辑,您最终可能会重写标准库. (5认同)
  • 当它已经成为语言的一部分时,为什么要重新发明轮子呢? (4认同)
  • @Clawsy我认为你错过了Gintautas的观点:你是一名程序员 - 如果你需要的功能不存在,你可以创建它. (2认同)
  • 不,我没有错过这一点:)。我完全理解。我只想在我的应用程序中添加尽可能少的代码。就我而言,如果我找到这样的方法会更好(对于软件工程问题)。如果没有,那就是...我做了一个,没问题。我只是想知道是否有预定义的。我不是懒惰,它只是在必须很好地照顾的巨大应用程序中插入代码。我只是想知道......因为我不想重复自己。(DRY - 不要重复自己,来自 Pragmatic Programmer book :D)。 (2认同)
  • 使用File.exist?而不是File.exists?因为这在ruby 2.2.0中已弃用:http://ruby-doc.org/core-2.2.0/File.html#method-c-exists-3F (2认同)