Chinaunix

标题: 新手请教perl中如何遍历目录树 [打印本页]

作者: wjlabcwjl    时间: 2011-06-20 22:45
标题: 新手请教perl中如何遍历目录树
如题,就是给定一个目录,列出这个目录及其所有子目录中的文件。
谢谢先~
作者: iamlimeng    时间: 2011-06-20 23:00
用递归,几行代码足够
作者: zhlong8    时间: 2011-06-20 23:35
perl -MFile::Find -E "find sub {say $File::Find::dir , '/', $_ }, some_dir"
作者: tima123    时间: 2011-06-20 23:52
一段WEB应用共你参考,列出所在脚本当前目录及子目录所有files

$SET{my_path} = ($0 =~ /^(.+)[\/\\]/)[0] || '.';
$SET{my_path} =~ s/\\/\//g;


Dir_tree($SET{my_path});

sub Dir_tree {

        my @files =Readdir_to_array("$_[0]");

        foreach (@files) {
                next if ($_ eq".")||($_ eq"..");

                unless(-d"$_[0]/$_"){
                        print "$_[0]/$_\n";
                }
                else {
                        &Dir_tree("$_[0]/$_");
                }
        }
        return;
}

sub Readdir_to_array {
        opendir( FILESS, "$_[0]" );
        my @lines = readdir(FILESS);
        closedir(FILESS);
        return (@lines);
}
作者: wjlabcwjl    时间: 2011-06-21 04:46
本帖最后由 wjlabcwjl 于 2011-06-21 05:45 编辑
  1. sub listfile{
  2.         my $dir = shift @_;
  3.         opendir DH, $dir;
  4.         foreach my $file (readdir DH){
  5.                 next if $file eq "." or $file eq "..";
  6.                 $file = "$dir/$file";
  7.                 if(-d $file){
  8.                         &listfile($file);
  9.                 }
  10.                 else{
  11.                         print $file;
  12.                 }
  13.         }
  14.         return 1;
  15. }

  16. &listfile("目录");
复制代码
用递归函数大概就是这样了吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2