とを使用Dir::[]
しFile::absolute_path
ます。
partial_name = "media_httpfarm3static_mAyIi.jpg"
Dir["../**/*#{partial_name}"].each do |filename|
puts File.absolute_path(filename)
end
これはグロブを使用します"../**/*media_httpfarm3static_mAyIi.jpg"
(1 つ上のディレクトリに移動し、すべてのサブディレクトリを (再帰的に) 検索して、部分文字列 で終わるファイルを探します"media_httpfarm3static_mAyIi.jpg"
。相対パスはArray
.
Array#each
、などを使用Array#map
して、これを必要なものに変換できます。相対パスを絶対パスに変換するには、それを に渡すだけFile::absolute_path
です。
絶対パスを取得したら、それを使用してファイルを開いたり、ファイルを読み取ったりできます。
ファイル パス上
グロブ"../**/*media_httpfarm3static_mAyIi.jpg"
は、現在の作業ディレクトリに相対的です。通常、これはプログラムが実行されたディレクトリです。ソースファイルのディレクトリではありません。これは、さまざまなユーティリティを使用して変更できます。
ソースコードファイルに相対的なグロブを常に使用するには、次を試してください。
Dir[File.expand_path('../**/*#{partial_name}', __FILE__)]
以下も使用できます。
Dir[File.join(__dir__, "..", "**", "*#{partial_name}")]
注: __dir__
Ruby 2.0 で追加されました。古いバージョンの ruby を使用する場合File.dirname(__FILE__)
最初のコード サンプルFile::absolute_path
で使用されました。最後のサンプルFile::expand_path
で使用されます。ほとんどの場合、これらは同じ意味で使用できます。ドキュメントによると、わずかな違いがあります。
パス名を絶対パス名に変換します。相対パスは、dir_string が指定されていない限り、プロセスの現在の作業ディレクトリから参照されます。この場合、それが開始点として使用されます。指定されたパス名が「~」で始まる場合、展開されず、通常のディレクトリ名として扱われます。
パス名を絶対パス名に変換します。相対パスは、dir_string が指定されていない限り、プロセスの現在の作業ディレクトリから参照されます。この場合、それが開始点として使用されます。指定されたパス名は「~」で始まる場合があり、これはプロセス所有者のホーム ディレクトリに展開されます (環境変数 HOME が正しく設定されている必要があります)。「~user」は、指定されたユーザーのホーム ディレクトリに展開されます。