LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1260|回复: 1

谁能帮忙看看这个脚本错在哪里

[复制链接]
发表于 2007-11-25 08:58:07 | 显示全部楼层 |阅读模式
需求:递归读取目录下所有文件,并给出一个列表

程序:
#######程序开始#######
#! /usr/bin/perl

sub ReadDir
{
  my ($path)=@_;
  opendir(DIR,$path);
  my @files=readdir DIR;
  closedir(DIR);
  return @files;
}

sub ShowDir
{
  my ($path)=@_;
  my @files=ReadDir($path);
  for(@files)
  {
    if($_=~m/^.{1,2}$/)
    {next;}
    print $path."/".$_."\n";
    if(-d $_)
    {
      ShowDir($path."/".$_);
    }
  }
}

ShowDir(".");
########程序结束#######
现在的问题是,为什么这个程序仅深入到2层,就无法再进入了?
例如,把以上文件保存为showdir.pl,在Linux源代码目录下执行
./showdir.pl | grep 'Makefile' -r
结果是:
./Makefile
./block/Makefile
./crypto/Makefile
./drivers/Makefile
./drivers/block/Makefile
./drivers/crypto/Makefile
./drivers/net/Makefile
./init/Makefile
./ipc/Makefile
./kernel/Makefile
./lib/Makefile
./net/Makefile
./scripts/Makefile
./scripts/Makefile.build
./scripts/Makefile.clean
./scripts/Makefile.headersinst
./scripts/Makefile.host
./scripts/Makefile.lib
./scripts/Makefile.modinst
./scripts/Makefile.modpost
./security/Makefile
./sound/Makefile
./sound/drivers/Makefile
./usr/Makefile
./Makefile.lst
与(正确的)find . -iname 'Makefile'的输出相比,少了很多。
发表于 2007-11-28 13:42:45 | 显示全部楼层
readdir DIRHANDLE
               Returns the next directory entry for a directory opened by
               "opendir".  If used in list context, returns all the rest of
               the entries in the directory.  If there are no more entries,
               returns an undefined value in scalar context or a null list in
               list context.

               If you're planning to filetest the return values out of a
               "readdir", you'd better prepend the directory in question.
               Otherwise, because we didn't "chdir" there, it would have been
               testing the wrong file.

                   opendir(DIR, $some_dir) || die "can't opendir $some_dir: $!";
                   @dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
                   closedir DIR;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表