我尝试过以下操作,这有助于我看到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
升级 升级 < / strong>,从当前目录中不改变它?
File structure
=================
Dir-> E:\WIPData\
|
(E:\WIPData\Ruby)
|
--------------------------------------------------
| | | | |
(xxx) (yyyy) (zzzz) (pppp) (E:\WIPData\Ruby\Scripts) <= It is PWD
答案 0 :(得分:1)
您可以通过以下方式在当前目录中找到第一个subDirectory:
Dir.glob('*').find { |fn| File.directory?(fn) }
但是,正如有人所说,它并不是唯一的定义。
和第一个父目录这样:
File.expand_path("..", Dir.pwd)
HTH
答案 1 :(得分:1)
要从路径获取父目录,请使用:
File.dirname('/path/to/a/file.txt')
=> "/path/to/a"
除非只有一个子目录,否则无法获取“子”目录,因为文件系统没有默认子目录的概念。如果只有一个,那么这对你来说是一个明显的选择,而不是你的代码。仅获取子目录列表:
Dir.entries('.').select{ |e| File.directory?(e) }
这会将'.'
下的子目录(当前目录为AKA)作为数组返回,该数组至少为['.', '..']
,分别表示当前目录和父目录。例如,在我的pry实例运行的当前目录中,我回来了:
[".", "..", ".svn", "old"]
作为可用目录的列表。哪个是默认值?我能做到这一点:
Dir.entries('.').select{ |e| File.directory?(e) && !e[/^\./] }
=> ["old"]
返回唯一的“可见”目录,即它不是“隐藏”目录,因为它不以'.'
开头。这不是默认值,因为正如我所说,文件系统没有“默认”子目录概念。在另一个目录中,我可能会看到许多目录被返回,所以我必须指定要下载哪个目录,或者用于文件访问。