ファイル一覧を取得する

Perl Script getfilelist.cgi


#----------------------#
#  ファイル一覧の取得  #
#----------------------#

sub GetFilelist {

      # 引数の取得、変数の準備
      my ($dir, $extension, $swich) = @_;
      my ($temp, $file, $e, $n, @filelist);
      my $i = 0;

      # 複数指定の拡張子を分割
      @ext = split(/\//, $extension);

      # ディレクトリを開く
      opendir (DIR , $dir) || return false;

            # ディレクトリにあるファイル等を1つずつ抽出
            while ($file = readdir DIR) {
                  # ゴミをはじく
                  if ($file =~ /^\.{1,2}$/) {
                        next;
                        } else {
                        # 大文字小文字の判定
                        if ($swich == 1) {
                              $temp = lc($file);
                              foreach (@ext) {
                                    $_ = lc($_);
                                    }
                              } else {
                              $temp = $file;
                              }
                        # ファイルが指定拡張子と合致するかを拡張子毎にチェック
                        foreach $e (@ext) {
                              # 拡張子が指定されていて且つ、ワイルドカードではない
                              if ($e && $e ne ".[*]") {
                                    # 拡張子以外の文字列に引っかからないための措置
                                    if (index($temp, $e, length($temp) - length($e)) != -1) {
                                          $filelist[$i] = $file;
                                          $i++;
                                          # ヒットしたら次のファイルへ
                                          last;
                                          } else {
                                          # ヒットしないため別の拡張子へ
                                          next;
                                          }
                                    } else {
                                    # ワイルドカードを指定された時
                                    if ($e eq ".[*]") {
                                          if ($file =~/\./) {
                                                $filelist[$i] = $file;
                                                $i++;
                                                last;
                                                }
                                          } else {
                                          # 拡張子の指定がない時
                                          $filelist[$i] = $file;
                                          $i++;
                                          last;
                                          }
                                    }
                              }
                        }
            }

      closedir(DIR) ;

      # 結果としてファイル一覧を返す
      return @filelist;

}

使い方

ファイルリストの取得
&GetFilelist(ディレクトリ, 拡張子, スイッチ);
返り値:ファイル一覧(ディレクトリが開けない場合は「false」)
ディレクトリは相対パスで指定(絶対パスは不可)
拡張子は「/(スラッシュ)」で区切ることで複数指定可
拡張子に「.[*]」を指定すると全てのファイルを返す
拡張子に0を指定する(&GetFilelist(ディレクトリ, 0, スイッチ);)とディレクトリ一覧を返す
スイッチは0か1を指定。1を指定するとファイル名を全て小文字に変換して検索。0の場合は大文字と小文字が区別される

使用例別サーバーを使用

拡張子
ディレクトリ
大文字小文字の区別
区別する 区別しない

*テスト用にTXTファイル、JPEGファイル、HTMLファイルがありますがいずれも0byteのファイルです。
*ファイルは拡張子で判断するので、拡張子のないファイルは探せません。
*サーバーが落ちている場合が多々あります。