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)

HTH

于 2013-01-28T13:38:41.847 に答える
1

パスから親ディレクトリを取得するには、次を使用します。

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

ファイルシステムにはデフォルトのサブディレクトリの概念がないため、子ディレクトリが1つしかない場合を除き、「その」子ディレクトリを取得する方法はありません。1 つしかない場合、それはあなたにとって明らかな選択ですが、コードにとってはそうではありません。サブディレクトリのみのリストを取得するには:

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

'.'これは、 (別名現在のディレクトリ) の下にある子ディレクトリを配列として返します。これは['.', '..']、少なくとも、現在のディレクトリと親のディレクトリをそれぞれ意味します。たとえば、pry インスタンスが実行されている現在のディレクトリでは、次のように返されます。

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

利用可能なディレクトリのリストとして。デフォルトはどれですか?私はこれを行うことができます:

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

これは、唯一の「可視」ディレクトリを返します。つまり、それは で始まらないため、「隠し」ディレクトリではありません'.'。前述したように、ファイル システムには「デフォルト」の子ディレクトリの概念がないため、これはデフォルトではありません。別のディレクトリでは、おそらく多くのディレクトリが返されるので、どのディレクトリに降りるか、またはファイル アクセスに使用するかを指定する必要があります。

Ruby にはFileおよびDirツールの優れたスイートと、Findクラスがあるので、それらのドキュメントを読んで何ができるかを確認してください。

于 2013-01-28T14:20:02.207 に答える