指定文字を含むファイル名の取得方法と注意点

このQ&Aのポイント
  • 指定文字を含むファイル名を取得する方法として、「readdir」関数を使用します。
  • ファイル名末尾が"tmp"となったファイルのみを取得するためには、条件分岐を追加する必要があります。
  • "tmp"を含むファイル名を取得するためには、ファイル名の中に"tmp"が含まれるかどうかを確認します。
回答を見る
  • ベストアンサー

指定文字を含むファイル名の取得

こんばんは、質問させてください。 今あるディレクトリのファイルを取得しようと考えています。ですが、取得したいファイルはファイル名末尾が"tmp"となったものだけを取得したいと考えています。 $dir = "/home/httpd/test/"; while($fnm[] = readdir($dir)); closedir($dir); sort($fnm); reset($fnm); while($a = each($fnm)){ if(($a[1] != ".") and ($a[1] != "..") and ($a[1] != "")){ $file_data[] = $a[1]; } } ってとこまでしかわからず、欲しくないファイル名まで$file_dataに入ってしまいます。 aaaaa_1111.txt(取得したくない) aaaaa_1111.txt.tmp(取得したい) aaaaa_1111.tmp.txt(取得したくない) 末尾が"tmp"のみ欲しいです。 すみませんが、宜しくお願い致します。

  • 653
  • お礼率36% (138/382)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

この方法でどうでしょうか。 $dir = "/home/httpd/test/"; if ($test_dir = @opendir($dir)) { while($file = readdir($test_dir)) { if (preg_match("/tmp$/", $file)) { $file_data[] = $file; } } }

関連するQ&A

  • readdirでのファイル名取得

    readdir()にて、textファイルのみ取り出すにはどのようにすれば良いのでしょうか? 現状は、後処理で、/txt|TXT/でマッチさせています。 opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • readdir におけるフルパスでのファイル名取得(1)

    前提: current directory---perl scriptが存在する data directory -----.\DATA¥ current directory直下のフォルダ"DATA"に含まれるファイル名(text file)の取得は、 ------------------------------ opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } で、できますが、フルパス付は、どのようにすればできるでしょうか? 現状、DOS promptで下記のようにやっています。 dir /s/b/o .\DATA\*.txt > filelist.dat これを、perlで読み込んで、処理をやっています。 readdirをうまく使って、perlの中で済ませてしまいたいのです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ディレクトリ内の最新ファイルのみをコピーが上手くいかない

    下記のようなスクリプトにより、 ./ディレクトリ内の更新日付が最新のファイル名を取得し、 そのファイルを./bbbディレクトリにコピーするということを行いたいのですが、 更新日付が最新のものに関わらず全てのファイルがコピーされてしまいます。 <?PHP $dir = opendir("./"); $latestfile = 0; while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; $ftime = filemtime("$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename =$fnm; $to="./bbb/".$fnm; if(!file_exists($to)) copy("./".$fnm,$to); } } closedir($dir); ?> 自力ではどこがヘンなのか理解できないため、どなたか教えてください。

    • ベストアンサー
    • PHP
  • フォルダ内のTXTファイル一覧表示

    opendir(DIR,"./"); while($bbb=readdir(DIR)) { print "<a href=\"$bbb\">$bbb</a><br>\n"; } closedir(DIR); で、取得するファイルをTXTに限定したいと思っています。 どのように追加すればいいかご存知の方がいましたら 教えて下さい。

    • ベストアンサー
    • Perl
  • ディレクトリ名を取得したい

    perlでディレクトリ名だけを取得したいのですが、 なかなかうまい方法が見つかりません。 ファイル名を取得する・・・というのは結構あるのですが、 ディレクトリ名だけ、というのがどうもわかりません。 ちなみにファイル名取得は以下のようにやっています。 my $md; opendir(DIR, 'q'); while (defined($dir = readdir(DIR))) { $md=substr($dir,0,6); } closedir(DIR); ディレクトリ名だけを取得・・・というのはどうやればよいのでしょうか。

    • ベストアンサー
    • Perl
  • ファイル名を取得できない

    次のようなソースでディレクトリ内のファイル名を取得しようとしています。 $dh=opendir("."); while(($entry=readdir($dh))){ if(is_file($entry)){ print $entry."<>"; } } closedir($dh); このソースを、取得したいディレクトリ内で動かすとまったく問題ないのですが、ディレクトリのパスを1個上の階層などから相対パスで指定すると、.phpファイルと.htmlファイルは取得するのですが、ほかのファイル名は取得されなくなってしまいます。 何かphp.iniなどで設定があるのでしょうか。 回避方法がありましたら是非ご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • readdirで文字化け

    Smartyでファイル情報を取得するシステムを作ろうと思ってます。 まずあるフォルダ直下のフォルダ、ファイルを取得しようと思い、 下のようなものを作りました。 $dir = "./"; $data = array(); if(($dh = opendir($dir)) == true){  while(false !== ($file = readdir($dh))){   $data[] = $file;  }  closedir($dh); } $this->set('data',$data); このような感じで、tplのdataに配列の結果を出力しようと思ってますが、 $dir直下のフォルダまたはファイルが日本語だと文字化けしてしまいます。 どこかで、文字コードの設定が必要なのかな?と思ってますが それをどこですべきなのか?どのようにすべきなのかがわかりません。 わかる方がいらっしゃいましたら、どうぞ教えていただきたいと思います。

    • ベストアンサー
    • PHP
  • fopenで変数で指定したファイルの開き方

    同階層にあるディレクトリの中の更新日付が最新のファイルを整形してHTML形式にて出力するスクリプトを書いています。 下記に例を書きます。 注)aaa→同階層にあるディレクトリです。   PHP→Ver4.3.8 <?php $dir = opendir("./aaa"); $latestfile=0; while ($fnm = readdir($dir)) { $ftime = filemtime($fnm); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename = $fnm; $handle = @fopen("$latestfilename", "r"); if ($handle) { while (!feof($handle)) {    ・    ・    ↓   sring処理へと続く   echo(nl2br($String処理後の変数名));      } } fclose($handle); } } closedir($dir); ?> この方法だと上手くいきません。 エラー内容は『fclose(): supplied argument is not a valid stream resource』です。 ファイルが開かれていません。 よってfopenで変数で指定されたファイルを開く方法をご教授願います。 もし『fopen使うこと自体が誤っている』ということでしたら正しい書き方をご教授願います。

    • ベストアンサー
    • PHP
  • フォルダ内のファイル名を取得して配列にぶち込みたいです

    こんにちは。 フォルダ内ファイル名を一覧にして表示させることまでは出来ますが、 この一覧表示されたファイル名を配列に入れるにはどうしたらよいでしょうか。 <?php $dir = "sample/"; // ディレクトリの内容を読み込みます。 if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: " . $file . "<br />\n"; } closedir($dh); } ?> ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • フォルダ内のファイル名取得の仕方が分かりません

    Apache2.0.47、PHP4.3.2で使用しています。 フォルダ内のファイル名の取得を以下のように書いています。 (scandirは使えませんでした) <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } sort($files); print_r($files); ?> "."と".."も取得されるので、以下のように変更したのですが同じ結果でした。 <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { if(filename!=". "){ if(filename!=".. "){ $file[] = $filename; } } } sort($files); print_r($files); ?> "."と".."をはぶいたファイル名だけを取得したい場合にはどうすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP