【解決で500P】:Perlで階層を走査したい


WindowsXPでPerlスクリプトを実行しています。

以下のスクリプト「Perlで階層のあるディレクトリを走査する」
http://code.nanigac.com/source/view/535
を利用して、あるフォルダ以下にあるファイルリストを出力するスクリプトを作っています。

しかし、「表」「予」「申」「能」「十」「ソ」などの0x5C文字がフォルダ名の最後に付いていると
そのフォルダより下を走査できません。
[例]¥日程表¥ ¥教育技能¥

これ以下も走査出来るようにするにはどうすればよいでしょうか。

回答の条件
  • 1人2回まで
  • 登録:2008/08/01 14:56:21
  • 終了:2008/08/04 09:45:49

ベストアンサー

id:ardarim No.1

ardarim回答回数892ベストアンサー獲得回数1422008/08/02 00:05:02

ポイント500pt

こんな感じでどうでしょうか。

use File::Basename;

# entry : サーチするディレクトリ
# depth : 階層の深さ(tabインテンドの表示数)
sub my_walk
{
  my $entry = $_[0];
  my $depth = $_[1];

  my $type  = "";

  $type = "(d)" if (-d "$entry/");
  $type = "(s)" if (-l "$entry/");

  print "|\t" x $depth, "+---->", basename($entry), $type, "\n";

  return if (! -d "$entry/") || (-l "$entry/");

  opendir(DIR, "$entry/");
  my @list = sort readdir(DIR);

  foreach my $name (@list)
  {
    next if $name eq '.' || $name eq '..';

    my_walk("${entry}/${name}", $depth+1);
  }

  closedir(DIR);
}

$entry = $ARGV[0];
$depth = $ARGV[1];

my_walk($entry, $depth);

参考:Shift-JISテキストを正しく扱う - Shift-JISの漢字を含むファイル名/パス名

id:harrypotter

回答ありがとうございます。

月曜日に試させていただきます。

→basenameでディレクトリ名は拾えませんでしたが、なんとかいけました。ありがとうございます!

2008/08/04 09:45:21

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません