我正在尝试编写一个小的ruby脚本,根据包含尾随/
的字符串来检测给定的参数是文件还是目录。
要明确我不有兴趣知道文件或目录是否实际存在,换句话说,AFAIK File.directory?
对我不起作用。
我在标准库中找到的所有方法(例如Pathname.basename
)都会自动删除尾随/
(如果有的话)。所以做这样的事情:
arg = "/foo/bar/baz/"
if File.basename(arg).include?("/")
puts "#{arg} is a directory"
end
无效。
有简洁的方法吗?我错过了什么吗?
如果可能的话,我宁愿不诉诸正则表达式。
答案 0 :(得分:8)
它仅取决于最后一个字符吗?如果是,arg[-1]
就足够了
if arg[-1] == ?/
puts "#{arg} is a directory"
end
答案 1 :(得分:2)
由于/foo/bar/baz
可以引用 baz
目录中名为/foo/bar
的文件或名为/foo/bar/baz
的目录,因此无法确定性地确定它是一个目录还是一个文件而没有实际命中文件系统。
文件名的规则不区分文件和目录 - 实际上在* nix的许多方面,目录 只是具有特殊属性的文件。如果要为应用程序建立一个规则,指出目录将始终以尾随分隔符结束,那么您可以使用:
is_directory = arg =~ %r{#{File.PATH_SEPARATOR}\Z}
或
is_directory = arg[=1] == File.PATH_SEPARATOR
答案 2 :(得分:0)
你的意思是这样的吗?
puts "#{arg} is a directory" if arg =~ %r|/\z|