ruby コピペライブラリ一覧→ http://morakana.hatenablog.jp/entry/2018/03/13/100032
この enum_files メソッドは、パターンにマッチングしたファイル名一覧を取得します
enum_files(['./*'])
で、マッチングしたファイルのファイル名が絶対パスの配列で返ってきます
パターンを複数個指定したい場合は、パターンを配列で指定します
enum_files(['./*.rb', './*.txt'])
絶対パス以外の形式でファイル名を取得したい場合は
第二引数にフォーマット文字列を指定することで戻り値をカスタマイズ出来ます
フォーマット文字は
a 絶対パス名
d ディレクトリ(絶対パス)まで
f ファイル名(拡張子を含む)
F ファイル名(拡張子を含まない)
e 拡張子のみ
の組み合わせで指定します
たとえば
enum_files(['./*.rb', './*.txt'], 'aFfe')
のようにすると、対応した各ファイルに対して
[<絶対パス名>, <ファイル名(拡張子を含まない)>, <ファイル名(拡張子を含む)>, <拡張子のみ>]
がセットされた配列の配列で返します
無効なフォーマット文字を入れた場合は nil が入ります
enum_filesメソッド定義
def enum_files(ptn, format = 'a') files = [] Dir.glob(ptn, File::FNM_CASEFOLD).each{|i1| fullpath_name = File.expand_path(i1) file = [] format.split('').each{|i2| file << ( case i2 when 'a' fullpath_name when 'd' File.dirname(fullpath_name) when 'f' File.basename(fullpath_name) when 'F' File.basename(fullpath_name, '.*') when 'e' File.extname(fullpath_name) else nil end ) } files << file } return(files) end
同等の機能で配列クラスを拡張するバージョンはこちら
class Array def enum_files(format = 'a') files = [] Dir.glob(self, File::FNM_CASEFOLD).each{|i1| fullpath_name = File.expand_path(i1) file = [] format.split('').each{|i2| file << ( case i2 when 'a' fullpath_name when 'd' File.dirname(fullpath_name) when 'f' File.basename(fullpath_name) when 'F' File.basename(fullpath_name, '.*') when 'e' File.extname(fullpath_name) else nil end ) } files << file } return(files) end end
配列にファイル検索パターンをセットしてから
配列のenum_filesインスタンスメソッドを実行します
引数はフォーマット文字列を指定します(省略可)
['./*.rb', './*.txt'].enum_files('aFfe')
で、上の例と同等の機能になります