最近在学习prel,写了个脚本,用于查询出当前目录下的所有文件。
源码如下:
#!/usr/bin/perl
use strict;
use warnings;
use locale;
use utf8;
use Cwd;
#Current sub dir
my @csdir=qw("");
#Current sub dir space
my @csspace=" ";
sub print_prefix
{
my $len=$#csspace;
for(my $i=0;$i <= $len -1 ;$i++)
{
print " ";
}
}
sub list_files
{
my $curdir=$_[0];
my $fulldir="";
if(index($curdir,"/") != 0)
{
$fulldir=$fulldir."/".$curdir;
}
else
{
$fulldir=$curdir;
}
print_prefix();
print ".".substr($fulldir,rindex($fulldir,'/'))."\n";
my $FH;
if(!(-e $fulldir))
{
}
elsif(-f $fulldir) #file
{
}
elsif(opendir($FH,$fulldir))
{
my @dirs=grep(!/^\.\.?$/,readdir $FH);
my $len=$#dirs;
my $b=0;
for(my $i=0;$i <= $len;$i++)
{
if(-f $fulldir."/".$dirs[$i]) #It is a file
{
$b++;
print_prefix();
print "\t";
print "$dirs[$i](" . get_file_size($dirs[$i]) . "k)\n";
}
}
{
push @csspace,"\t";
for(my $i=0;$i <= $len;$i++)
{
if(-d $fulldir."/".$dirs[$i])#It is a dirscott
{
list_files($fulldir."/".$dirs[$i]) ;
}
}
}
pop @csspace;
}
}
sub get_file_size
{
my @args = stat ($_[0]);
if(!($args[7]))
{
return 0;
}
return $args[7] if($args[7] < 2048);
return $args[7] / 1024 ;
}
my $cwd=getcwd;
list_files($cwd);
将以上代码:
1.保存成文件lsdir;
2.chmod 755 ldsir
3. ./lsdir
效果如下: