根据当前工作目录获取文件路径?

时间:2013-12-05 04:47:38

标签: ruby compass-sass

如何转换以下绝对路径:

/path/to/some/file/that/i/need.file

进入相对路径:

file/that/i/need.file

当我在/path/to/some目录中时?

我想获取一个绝对文件路径并将其拆分到当前工作目录,以便我拥有从当前工作目录开始的文件名路径。

我是在Compass config.rb的on_stylesheet_saved回调中运行它。

3 个答案:

答案 0 :(得分:4)

我会使用Pathname类:

full_dir = Pathname.new('/path/to/some/file/that/i/need')
base_dir = Pathname.new('/path/to/some')
full_dir.relative_path_from(base_dir).to_s # => "file/that/i/need"

以下是the documentation关于路径名的说法:

  

Pathname表示文件系统上的文件或目录的名称,但不表示文件本身的名称。

     

路径名取决于操作系统:Unix,Windows等。此库适用于本地操作系统的路径名,但实验上支持非Unix路径名。

     

路径名可以是相对的或绝对的。直到您尝试引用该文件时,文件是否存在才会发生。

     

路径名是不可变的。它没有破坏性更新的方法。

     

这个类的目标是以比标准Ruby提供的更简洁的方式操作文件路径信息....

答案 1 :(得分:1)

你应该能够做下面的事情。

absolute_path.split(Dir.pwd.to_s)[1].sub('/','')

这将获得一个2元素数组,其中第二个元素是您想要的路径的剩余部分。然后sub将去除前缀正斜杠。

答案 2 :(得分:0)

您可以使用以下表达式

absolute_path.gsub(Dir.pwd, '')

在这种情况下,如果当前目录是绝对路径的一部分,它将返回相对路径,否则它将返回完整路径