2014-09-12 41 views
0

我試圖返回的文件列表,使用下面的代碼目錄:路徑項目之外,紅寶石迪爾

Dir[directory] 

我遇到的問題是,這似乎始終以URL爲相對於項目地點。例如,將'*'傳入Dir將返回一個包含我的Gemfile等的數組。我希望能夠獲得目錄的文件列表,例如/Users/jason/Pictures,但是當我傳入/Users/jason/Pictures/*時,我返回了一個空數組。

任何指針將不勝感激。 謝謝。

+0

'Dir ['/ Users//Pictures/*']'適用於我的機器。這可能是一個權限問題? – 2014-09-12 23:53:51

+0

我認爲這可能是因爲我忽略了我在我的機器上創建了測試目錄的事實,但是SSH已經進入了另一個開發框。也許是時候睡覺了。 – 2014-09-13 00:07:30

回答

2

嘗試:

Dir['/Users/jason/Pictures/*'] 

如果有嵌入在路徑的文件或目錄,你會從Dir[]得到一個數組。如果你不知道,並且你確定目錄中有文件,那麼就會出現錯誤,但最有可能的情況是你給它的glob字符串。通過移動到它並使用pwd來確定操作系統認爲它是什麼,從而確認它是正確的路徑。 Dir[]如果glob字符串無效則不會返回錯誤,它只是返回一個空數組。

您可以嘗試使用File.exist?('glob string without *')並在嘗試迭代它之前查看該路徑是否存在。

在我的機器,在IRB在我的主目錄運行以下命令:

Dir['./vim/bundle/*'] 

返回:

[ 
    [ 0] "./vim/bundle/closetag.vim", 
    [ 1] "./vim/bundle/ctrlp.vim", 
    ... 
    [31] "./vim/bundle/vim-vividchalk", 
    [32] "./vim/bundle/Vundle.vim" 
] 

我可以使用絕對路徑也:

Dir['/Users/ttm/vim/bundle/*'] 

並獲得:

[ 
    [ 0] "/Users/ttm/vim/bundle/closetag.vim", 
    [ 1] "/Users/ttm/vim/bundle/ctrlp.vim", 
    ... 
    [31] "/Users/ttm/vim/bundle/vim-vividchalk", 
    [32] "/Users/ttm/vim/bundle/Vundle.vim" 
] 

請注意,如果您使用相對全局字符串,並且絕對全局字符串的絕對路徑名爲相對路徑名。

0

您需要使用的條目方法

Dir.entries('/') 
=> [".", "..", ".apdisk", ".com.apple.backupd.mvlist.plist", ".dbfseventsd", ".DocumentRevisions-V100", ".DS_Store", ".file", ".fseventsd", ".hotfiles.btree", ".MobileBackups",".OSInstallMessages", ".PKInstallSandboxManager", ".Spotlight-V100", ".SymAVx86QSFile", ".Trashes", ".vol", "Applications", "bin", "cores", "dev", "etc", "home", "Library", "net", "Network", "opt", "private", "sbin", "System", "tmp", "Users", "usr", "var", "Volumes", "~"] 

這裏的公報文件http://www.ruby-doc.org/core-2.1.2/Dir.html#method-c-entries