1

我尝试了以下帮助我看到的方法1-level down directory path

E:\WIPData\Ruby\Scripts>irb
irb(main):001:0> Dir.pwd
=> "E:/WIPData/Ruby/Scripts"
irb(main):004:0> Dir.pwd.gsub(/\/Scripts/,'')
=> "E:/WIPData/Ruby"
irb(main):005:0>

有没有办法从当前目录获取directory full path 1-level up1-level down而不更改它?

              File structure
             =================

             Dir-> E:\WIPData\
                   |                     
            (E:\WIPData\Ruby)      
                    |
  --------------------------------------------------
  |          |           |       |                 |
(xxx)     (yyyy)      (zzzz)   (pppp)       (E:\WIPData\Ruby\Scripts) <= It is PWD
4

2 回答 2

2

您可以通过这种方式在当前目录中找到第一个子目录:

Dir.glob('*').find { |fn| File.directory?(fn) }

尽管如此,正如有人所说,它并不是唯一定义的。

和第一个父目录这样:

File.expand_path("..", Dir.pwd)

高温高压

于 2013-01-28T13:38:41.847 回答
1

要从路径获取父目录,请使用:

File.dirname('/path/to/a/file.txt')
=> "/path/to/a"

除非只有一个,否则无法获取“子”目录,因为文件系统没有默认子目录的概念。如果只有一个,这对您来说是一个明显的选择,但对您的代码来说却不是。仅获取子目录的列表:

Dir.entries('.').select{ |e| File.directory?(e) }

这将返回'.'(又名当前目录)下的子目录作为数组,这将['.', '..']至少分别表示当前目录和父目录。例如,在我的 pry 实例正在运行的当前目录中,我返回:

[".", "..", ".svn", "old"]

作为可用目录的列表。哪个是默认值?我可以这样做:

Dir.entries('.').select{ |e| File.directory?(e) && !e[/^\./] }
=> ["old"]

它返回唯一的“可见”目录,即它不是“隐藏”目录,因为它不以'.'. 这不是默认值,因为正如我所说,文件系统没有“默认”子目录概念。在另一个目录中,我可能会看到返回了许多目录,因此我必须指定要进入哪个目录或用于文件访问。

Ruby 有一套不错的FileDir工具,以及Find类,因此请阅读他们的文档以了解您可以做什么。

于 2013-01-28T14:20:02.207 回答