ディレクトリの中をを再帰的にたどってすべてのファイルに対してなにかの処理をするには

PHP

function foo($path) {
   // ここでなにかの処理
   ...;
}

function recursive($dir) {
  if (!file_exists($dir)) {
    return;
  }
  $dhandle = opendir($dir);
  if ($dhandle) {
    while (false !== ($fname = readdir($dhandle))) {
       if (is_dir( "{$dir}/{$fname}" )) {
          if (($fname != '.') && ($fname != '..')) {
             recursive("$dir/$fname");
          }
       } else {
          foo($dir/$fname);
       }
    }
    closedir($dhandle);
  }
  foo($dir);
}

Perl

sub recursive {
    my ($dir, $p) = @_;
    my @files = glob("$dir/*");
    foreach my $file (@files) {
        if (-d $file) {
            recursive($file, $p);
        } else {
            $p->($file);
        }
    }
}

recursive('.', sub {
    # ここでなにかの処理
    # print "$_[0]\n";
});

sh (シェルスクリプト)

find コマンドとその -exec オプションか、 xargs コマンドをパイプでつないでうまくコマンドを組み立てる。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク