当前位置:首页 » 知网查重 » perl判断是否是目录

perl判断是否是目录

发布时间: 2021-03-02 16:37:45

『壹』 关于perl读入文件目录的问题

很明显上面两位来的程序自都无法正常使用,正确如下,

push @name_dir,$file if (-e "$directory/$file");

解释,-e的文件测试后面要接真正能查询到文件(或者文件夹)的路径,而两位的-e后面展开为某个文件的文件名,这样对这个文件是否存在是从当前目录开始的,所以一般的文件都无法找到,如果你在程序所在目录中放一两个文件名相同的文件,是可以被打印出来的,所以要记住,perl中这个文件的判断仅仅是对-e后面的路径所指示的文件是否存在的判断,把目录路径加在文件前,文件就可以找到了,我已经测试过了,自己改一下吧。
还有一个常识,为什么会输出几个点呢,在所有的文件夹中,有两个文件是你平时看不见的,这两个文件夹的名字是“.”和“..”分别代表当前目录和上层目录,在所有的目录中都存在,因此,你在判断的时候可以判断到这两个存在的文件夹,会被打印出来,至于这两个文件夹名有多好用,慢慢就会理解了。

『贰』 perl 文件 检测

给加分不?
#compare folders
use strict;

sub get;
sub FolderCompare;
#输入的格式为:"perl foldercompare.pl <ul1 name> <ul2 name>\n";

if ( @ARGV < 2 )
{
die;
}
system"svn export @ARGV[0] A";
system"svn export @ARGV[1] B";
my $dirA = "A";
my $dirB = "B";
FolderCompare($dirA, $dirB, "0"); #第一次正向比较
FolderCompare($dirB, $dirA, "1"); #第二次反向比较,主要是查出B中有而A中没有的
#其中第三个参数是为了清除第一次已经输出的不一样的文本
system"rm A -rf";
system"rm B -rf";
print "Finished!";
sub get
{
my $dir = $_[0];
my %array;
opendir(DIR, $dir);
while (my $file = readdir(DIR))
{
my @array_tmp = stat("$dir/$file");
if($file =~ m/^[^.]/)
{
if(-d "$dir\\$file") #判断是否为目录,并标记
{
$array{$file} = [$array_tmp[7], "1"];
}
if(-f "$dir\\$file") #判断是否为文件,并标记
{
$array{$file} = [$array_tmp[7], "0"];
#print "$file\t$array{$file}[1]\n";
}
}
}
return %array;
}

sub FolderCompare
{
my $FolderA = $_[0];
my $FolderB = $_[1];
my $temp = $_[2];
my %arrayA = get($FolderA);
my %arrayB = get($FolderB);
foreach my $FileNameA (keys(%arrayA))
{
if(exists($arrayB{$FileNameA}))
{
if($arrayA{$FileNameA}[1] eq "1")
{
if($arrayB{$FileNameA}[1] eq "1")
{
FolderCompare("$FolderA\\$FileNameA", "$FolderB\\$FileNameA", "$temp"); #都为目录,进行递归
}
}
if($arrayA{$FileNameA}[1] eq "0") #都为文件,进行比较
{
if($arrayB{$FileNameA}[1] eq "0")
{
if($arrayA{$FileNameA}[0] != $arrayB{$FileNameA}[0])
{
if($temp == 0)
{
print "$FolderA\\$FileNameA is different from $FolderB\\$FileNameA\n";
}
}
}
}
}
else
{
print "$FolderA\\$FileNameA is not exitst in $FolderB\n";
}
}
}

『叁』 您好,perl可以判断含有特定关键字的目录是否存在吗 如,if (-e $PATH./"ABC"*/){} 这种用法

opendir( DIRHANDLE, "$PATH" ) 版 or die "can not open dir";
my @权dir = grep { /ABC/} readdir(DIRHANDLE);
closedir (DIRHANDLE);
print"@dir\n";

『肆』 求助,用perl脚本怎样获取当前目录的全路径信息

1. 获取方法
use File::Basename;
专print dirname(__FILE__);

2. 设置当前目录为属lib:
use Cwd qw/abs_path/;
use File::Basename;

use lib abs_path(dirname(__FILE__)) . '/lib';

『伍』 perl判断文件是否存在

主要就是 -e 这个操作符 ( e 即是 "exist" )

$fileExist = -e "C:/windows/readme.txt";
if ( $fileExist ) {
print "Yes"
}
else {
print "No"
}

『陆』 perl if(-e $filename)我的为什么只能将要判断的文件跟perl脚本放在同一目录才能判断出来

这里实际涉及到一个程序工作目录的问题,我想你自己包括前面两个回答都没有考虑到点子上(不要见怪),程序运行的时候会以自己的工作目录作为相对路径的起点,也就是说我们测试一个test.txt,指的是当前工作目录下的text.txt,所以当你上加全路径也是会测试出错的,当然返回是不存在这个文件。
如果不清楚什么叫工作目录,那么可以简单的理解为你当前所在的目录,就是说你执行程序时所在的目录,当然不一定是你程序所在的目录,你程序可以在任何地方,你比如你当前所在目录为/home/test/,而运行的test_file.pl可能在/home/test/perl_script/下,你的工作目录依然是/home/test/,而不是/home/test/perl_script/
所以,如果要测试一个不在工作目录下的文件时,就要切换工作目录,在perl中,chdir操作符可以解决这个问题。如果你 test.txt放在/home/public/,而你在home/test下运行test_file.pl,那么需要chdir "/home/public" or die"cannot chdir to /home/public:$!";然后再进行 if(-e $filename).
讲得有点罗嗦了,但是我相信已经讲清楚了

『柒』 在Perl中有个if语句为if (-e "$dir/$_),其中$dir是某个目录,$_已取得$dir目录下的文件。

-e操作符测试文件或目录是否存在。

以下为文件测试清单:
文件测试测试操内作符提供的信息容
-r文件或目录可读
-w文件或目录可写
-x文件或目录执行
-o文件或目录归用户所有
-R文件或目录对真正用户可读
-W文件或目录对真正用户可写
-X文件或目录对真正用户执行
-O文件或目录归真正用户所有
-e文件或目录存在
-z文件存在且大小为0
-s文件或目录存在且不为0(返回字节数)
-f文件为普通文件
-d文件为目录
-l文件为符号链接
-p文件为命名管道(FIFO)
-S文件为一个套口(socket)
-b文件为块特殊文件
-c文件为字符特殊文件
-t打开tty控制台的文件句柄
-u文件或目录是设置用户ID号
-g文件或目录是设置用户组ID号
-k文件或目录的sticky位置位
-T文件是文本文件
-B文件是二进制文件
-M以天为单位的存在时间
-A以天为单位访问时间
-C以天为单位同代码更改时间

『捌』 perl 判断文件是否为空

先新建一个空的文件,然后拿要判断的文件和这个空文件进行回对比判断即可。
touch null

if(`答diff otherdo null`)
{
print "otherdo is no null\n";
}
else
{
print "otherdo is null\n";
}

『玖』 perl 如何判断一个文件夹下的文件夹个数

给你来一自个示例吧
#!/usr/bin/perl
use warnings;

$PATH="/path"
$DIR="dir"

opendir ETC, "${PATH}/${DIR}"
or die "can NOT open dir ${PATH}/${DIR} $!\n";
$dirnum=0;
while ( readdir ETC ) {
next if /^\./;
$dirnum++ if -d "${PATH}/$DIR/$_";
}
closedir ETC;
print " The dir number in $PATH/$DIR is $dirnum ";

『拾』 shell脚本,判断一个目录内是文件还是子目录

你能不能一次把问题提完整呢。
shell 没有提供处理文件系统的底层功能。
可以使用重定向,在得到一行后就立刻匹配,完成后立刻退出。它不需要等到ls命令完成。可以操作目录下存在大量文件的情况。
效率最快的是这个:

ls /opt -1F --sort=none | ( read LINE;echo "$LINE"| if grep -q "/$" ; then exit 0 ;else exit 1 ; fi ;)

这个命令返回0 表示/opt 目录下存在目录(不代表全部都是目录,这条命令基于你在问题中的假设)。返回非0表示包含非目录文件。
-1 表示ls 输出一行个文件。
-F 表示输出的每个文件后缀一个符号表示文件类型,文件夹的后缀为 /
--sort=none 表示按照磁盘存储顺序进行输出,不进行排序。
|grep -q '/$' 表示 如果匹配到/ 结尾的行。

最近几天你提的问题相当零散。都不知道你的思维对不对。
shell 本身就不是高效率的语言。想要高效率应该使用其他脚本语言,例如perl 。

热点内容
涂鸦论文 发布:2021-03-31 13:04:48 浏览:698
手机数据库应用 发布:2021-03-31 13:04:28 浏览:353
版面217 发布:2021-03-31 13:04:18 浏览:587
知网不查的资源 发布:2021-03-31 13:03:43 浏览:713
基金赎回参考 发布:2021-03-31 13:02:08 浏览:489
悬疑故事范文 发布:2021-03-31 13:02:07 浏览:87
做简单的自我介绍范文 发布:2021-03-31 13:01:48 浏览:537
战略地图参考 发布:2021-03-31 13:01:09 浏览:463
收支模板 发布:2021-03-31 13:00:43 浏览:17
电气学术会议 发布:2021-03-31 13:00:32 浏览:731