概要
ファイルのパスからファイル名とディレクトリを分割する方法をメモ。
ファイル名のみ取得する場合
パスから一番後ろのスラッシュに続く要素を取得するには、File.basenameメソッドを使用します。
第1引数でファイル名を表す文字列を指定します。
第2引数でサフィックスを文字列で与えます。'.' という文字列を与えた場合、'' はワイルドカードとして働き '.' を含まない任意の文字列にマッチします。
例
p File.basename("ruby/ruby.c") #=> "ruby.c"
p File.basename("ruby/ruby.c", ".c") #=> "ruby"
p File.basename("ruby/ruby.c", ".*") #=> "ruby"
p File.basename("ruby/ruby.exe", ".*") #=> "ruby"
p File.basename("ruby/y.tab.c", ".*") #=> "y.tab"
対象が存在するディレクトリのパスを取得する場合
対象が存在するディレクトリのパスを取得する場合(一番後ろのスラッシュより前の要素)を取得するには、File.dirnameメソッドを使用します。
第1引数でファイル名を表す文字列を指定します。
第2引数で末尾からいくつ取り除くかを指定します。
例
p File.dirname("dir/file.ext") # => "dir"
p File.dirname("file.ext") # => "."
File.dirname("/home/gumby/work/ruby.rb", 2) # => "/home/gumby"
File.dirname("/home/gumby/work/ruby.rb", 4) # => "/"
ファイル名と対象が存在するディレクトリのパスを分割して配列で取得する場合
ファイル名と対象が存在するディレクトリのパスを分割して配列で取得する場合File.splitメソッドを使用します。
[File.dirname(pathname), File.basename(pathname)]
と同じ結果となります。
例
File.split("/home/gumby/work/ruby.rb") # => ["/home/gumby/work", "ruby.rb"]