當前位置:首頁 » 知網查重 » 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