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

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

ユーザ用ツール


perl:dir_recursion1

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

perl:dir_recursion1 [2017/12/14 20:18]
perl:dir_recursion1 [2020/06/23 14:10] (現在)
行 1: 行 1:
 +====== ディレクトリを再帰的にたどりファイル一覧を取得したい その1 - Perl ======
 +~~socialite~~
 +<note important>この記事は 2006年10月07日に書かれたものです。</note>
 +
 +Perlでの実装方法について解説する。
 +
 +===== サンプル =====
 +<code 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";
 +    }
 +  }
 +
 +}
 +</code>
 +
 +===== 実行結果 =====
 +<code>
 +./css/view.css
 +./define.pm
 +./index.cgi
 +./js/index.js
 +./note/add.cgi
 +./note/del.cgi
 +./note/index.cgi
 +./note/view.cgi
 +</code>
 +
 +ここではファイル名の表示を行っているが、もちろん他の処理へ置き換えることが可能だ。変数に格納、関数(サブルーチン)を呼び出す、ファイル操作(削除・リネームなど)など様々な用途に利用できる。
 +
 +注意する点としては、ディレクトリ内の一覧を取得する時に、配列に全てを格納しておくことである。これを行わずに、ディレクトリ一覧を読み込みながら処理を行うと期待通りに動作しない場合がある。
 +
 +===== 関連書籍 =====
 +{{amazon>jp:4873113008}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00ISP0OM8}}
 +<html><p style="clear:both"></p></html>
 +
 +{{tag>CGI・Perl例文集 Perl ディレクトリ 再帰 }}
 +~~socialite~~
  

関連ページ