とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


サイドバー

言語

サーバ関連

ツール

API

読み物

その他

perl:dir_recursion1

ディレクトリを再帰的にたどりファイル一覧を取得したい その1 - Perl

この記事は 2006年10月07日に書かれたものです。

Perlでの実装方法について解説する。

サンプル

;#
;#再帰表示
;#
 
use strict;
 
#-- 再帰実行 --#
reflexiveFile('.');
 
#-------------------------------------------#
#■ディレクトリ配下を全て表示
#-------------------------------------------#
sub reflexiveFile{
  my $dir = shift;
  my @list = ();
 
  #-- カレントの一覧を取得 --#
  opendir(DIR, $dir) or die("Can not open directory:$dir ($!)");
  @list = readdir(DIR);
  closedir(DIR);
 
  foreach my $file (sort @list){
    next if( $file =~ /^\.{1,2}$/ );  # '.' と '..' はスキップ
 
    #-- ディレクトリの場合は自分自身を呼び出す --#
    if( -d "$dir/$file" ){
      reflexiveFile("$dir/$file");
    }
    #-- それ以外は表示 --#
    else{
      print "$dir/$file\n";
    }
  }
 
}

実行結果

./css/view.css
./define.pm
./index.cgi
./js/index.js
./note/add.cgi
./note/del.cgi
./note/index.cgi
./note/view.cgi

ここではファイル名の表示を行っているが、もちろん他の処理へ置き換えることが可能だ。変数に格納、関数(サブルーチン)を呼び出す、ファイル操作(削除・リネームなど)など様々な用途に利用できる。

注意する点としては、ディレクトリ内の一覧を取得する時に、配列に全てを格納しておくことである。これを行わずに、ディレクトリ一覧を読み込みながら処理を行うと期待通りに動作しない場合がある。

関連書籍

failed to fetch data: unkown error

failed to fetch data: unkown error

関連ページ

perl/dir_recursion1.txt · 最終更新: 2020/06/23 14:10 (外部編集)