为什么这个glob不能为我的服务器使用Rake FileList?

时间:2012-01-11 23:10:13

标签: ruby file rake glob

为什么我会从以下网址获取空文件清单:

  files = FileList.new("#{DEPLOYMENT_PATH}\**\*")

DEPLOYMENT_PATH是\\myserver\anndsomepath

的位置

如何从这样的服务器获取文件列表?这是Ruby / Rake的问题吗?

更新

我试过了:

  files = FileList.new("#{DEPLOYMENT_PATH}\\**\\*") 
  files = Dir.glob("#{DEPLOYMENT_PATH}\\**\\*") 
  files = Dir.glob("#{DEPLOYMENT_PATH}\**\*") 

更新:重新启动:如果我将服务器设置为:

,则有效
 //myserver/andsomepath

并获取这样的文件:

  files = FileList.new("#{DEPLOYMENT_PATH}/**/*") 

3 个答案:

答案 0 :(得分:2)

红宝石'在处理文件路径时,File.join旨在成为您的帮助者,通过以独立于系统的方式构建它们:

File.join('a','b','c')
=> "a/b/c" 

所以:

DEPLOYMENT_PATH = File.join('', 'myserver', 'andsomepath')
=> "/myserver/andsomepath"

Ruby通过感知操作系统来确定文件路径分隔符,并且应该自动提供正确的值。在Windows XP,Linux和Mac OS上,它是:

File::SEPARATOR
=> "/"

File.join(DEPLOYMENT_PATH, '**', '*')
=> "/myserver/andsomepath/**/*"

虽然您可以忽略助手,但它可以让您的生活更轻松。因为您正在对服务器工作,所以您可能希望查看File::ALT_SEPARATOR,或者只是重新分配到SEPARATOR并忽略该警告,让Ruby完成剩下的工作。

答案 1 :(得分:1)

如果你这样做会怎样?

Dir.glob("#{DEPLOYMENT_PATH}\**\*")

编辑:我认为Ruby更喜欢你做Unix风格的斜杠,即使你在Windows上也是如此。我假设理由是,相同的代码在Unix和Windows上工作更好,即使它在Windows上看起来很奇怪。

tl; dr :如果它适用于/但不适用于\,那么请使用有效的功能。

答案 2 :(得分:0)

由于:

 > "\*" == "*"
 => true 

改为使用"\\**\\*"