Rubyであるディレクトリのファイルを全て出力するプログラムを
書きたいのですが、どうすればできますか?
どなたか教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
一番シンプルな方法は Dir
のクラスメソッド glob
を使う方法です。
フィルターを使って取得します。
lang
1p Dir.glob("*") # ファイルの配列を返す ["bar", "foo"] 2Dir.glog("*") {|f| p f } # ブロック処理用
glob
に似た foreach
というメソッドもあり、こちらはフィルターではなくディレクトリーのパスを引数に取ります。
違いはカレント以外のディレクトリーを指定した時に出ます。
lang
1p Dir.glob("../*") # ["../qux", "../baz"] 2p Dir.foreach("..") # ["qux", "baz"]
ディレクトリー内のファイルを再帰的に取得したい場合は、Dir.glob
か Find.find
を使います。
glob
の場合、 **
を指定することによって再帰となります。
lang
1p Dir.glob("**/*") # ["bar" "foo" "foo/quux.txt" "foo/foo.rb"] 2p Dir.glob("**/*.txt") # ["foo/quux.txt"]
Find.find
では prune
でそのサブディレクトリー以下を検索しないようにすることができます。
ただし、必ずブロックを取り、配列を返すということはできません。
lang
1require 'find' 2 3Find.find("..") {|fpath| 4 Find.prune if ("../baz" == fpath) # baz 以下はみない 5 p fpath 6}
投稿2014/09/08 05:11
総合スコア863
0
ベストアンサー
Dir.open を使った例が既に回答されていますが、open した場合は close が必要です。
ブロック付きで呼び出した場合は、ブロック終了時に自動的に close されます。
参考:
Ruby | Dir.openAdd Star から引用
...
dir = Dir.open "hoge"
dir.each {|f|puts f}
dir.close
Dir.open("hoge") do |dir|
dir.each {|f|puts f}
end
私はさらに Dir.glob を使った例を示したいと思います。
lang
1Dir.glob('./*').each do|f| 2 puts f 3end
フォルダ以下を再帰的に表示させるなら、次の様にします。
lang
1Dir.glob('./**/*').each do |f| 2 puts f 3end
処理対象となるファイルを パターン指定でいろいろと制御できます。
投稿2014/09/07 04:57
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/09/09 01:13