查看原文
其他

Perl学习09之文件目录操作

pythonic生物人 pythonic生物人 2022-09-11

"pythonic生物人"的第14篇分享



摘要

Perl操作文件和目录、File::Basename模块及stats函数。

目录

1、文件目录操作常用操作符
2、stat函数
3、文件目录常用操作
创建文件
删除文件
创建目录
删除目录
切换目录
4、File::Basename模块操控路径
5、参考资料

正文开始啦



1、文件目录操作常用操作符

-s 判断文件存在且非空返回1;
-e -s 均能判断文件,目录是否存在,存在返回1;
-l 文件是软链接,返回1;
-d 是目录返回1;
-z 文件为空返回1;
-M 最后一次修改时间;
-T 最后一次访问时间
例如,es.pl
#!/usr/bin/perluse strict;use warnings;
my $filesize= -s "./BGI_basicperl";#该目录不为空,返回目录大小字节print "$filesize\n";
#-s 判断文件存在且不为空返回1,否则返回0print "file exists\n" if (-s "./a.txt");#文件存在返回1print "empty file\n" if (-s "./hha.test");#文件不存在返回0print "file not exist\n" if (-s "./hha.test1");#文件不存在返回0
#-s 判断目录存在,无论空或者不空均返回1,不能判断目录是否为空print "directory exists\n" if (-s "./BGI_basicperl");#目录存在非空返回1print "zerosize directory\n" if (-s "./estest");#空目录存在返回1print "directory not exist\n" if (-s "./BGI_basicperl1");#目录不存在返回0

#-e 判断文件存在,无论空或者不空均返回1,不能判断文件是否为空print "file exists\n" if (-e "./a.txt");#文件存在返回1print "empty file exists\n" if (-e "./hha.test");#空文件存在返回1print "file not exist\n" if (-e "./a.txt1");#文件不存在返0
#-e 判断目录存在,无论空或者不空均返回1,不能判断目录是否为空print "directory exists\n" if (-e "./BGI_basicperl");#目录存在非空返回1print "zerosize directory\n" if (-e "./estest");#空目录存在返回1print "directory not exist\n" if (-e "./BGI_basicperl1");#目录不存在返回0
#综上#-s 判断文件存在且非空返回1;#-e -s 均能判断文件,目录是否存在,存在返回1
#-l 文件是软链接,返回1print "a ln irectory\n" if (-l "./BGI_basicperl");
#-d 是目录返回1print "a directory\n" if (-d "./BGI_basicperl");
#-z 文件为空返回1print "a file exists\n" if (-z "./a.txt");#非空文件返回0print "empty file exists\n" if (-z "./hha.test");#空文件存在返回1
#-M 最后一次修改时间my $last_c_days=-M "./a.txt";#-T 最后一次访问时间my $last_r_days=-T "./a.txt";print "$last_c_days\t$last_r_days\n";

perl es.pl

4096

file exists

directory exists

zerosize directory

file exists

empty file exists

directory exists

zerosize directory

a ln irectory

a directory

empty file exists

1.11414351851852






2、stat函数

返回文件的13项属性信息。
例如, stat.pl
#!/usr/bin/perluse strict;use warnings;
my @arr_stat=stat($ARGV[0]);my @name_stat=qw/$dev, $ino, $mode, $nlink, $uid, $gid, $rdev,$size, $atime, $mtime, $ctime, $blksize, $blocks/;
foreach my $i (0..$#arr_stat){ print "$name_stat[$i]\t$arr_stat[$i]\n"}

perl stat.pl substr1.pl

Possible attempt to separate words with commas at stat.pl line 7.

$dev, 2113 #

$ino, 151030016306

$mode, 33204

$nlink, 1

$uid, 1024

$gid, 1024

$rdev, 0

$size, 269

$atime, 1586604409

$mtime, 1586604405

$ctime, 1586604405

$blksize, 4096

$blocks 8

每一行详细意义:






3、文件目录常用操作
  • 创建文件
#方法一,调用linux命令`touch creat.txt`;
#方法二,open打开文件句柄和输出创建文件open OUT,">>","./creat1.txt";print OUT "test";close OUT;
  • 删除文件

unlink "./creat.txt";unlink ("./creat1.txt","./hha.test");
  • 创建目录

`mkdir test_dir`;`mkdir -p test_dir/test`;
  • 删除目录

`rm -rf ./11`;`rm -rf ./test_dir`;
  • 切换目录

chdir "./";




4、File::Basename模块操控路径

例如,一个文件绝对路径,/home/littleperl/max.pl,可轻松获取如下内容
例,path.pl
#! /usr/bin/perluse strict;use warnings;
use File::Basename;my $path = $ARGV[0];my($filename, $dirs, $suffix) = fileparse($path,qr/\.[^.]*/);#以上分别为文件名,文件绝对路径,文件后缀名print"$filename\t$dirs\t$suffix\n";
my $filename1=basename($path);#默认返回带后缀文件名my $dirname1=dirname($path);#返回绝对路径print "$filename1\t$dirname1\n";
perl path.pl /home/study/max.pl
max     /home/study/    .pl
       max.pl  /home/study 


5、参考资料


https://perldoc.perl.org/File/Basename.html小骆驼




同系列文章

Perl学习01之标量数据

Perl学习02数组和哈希使用

Perl学习03之流程控制结构

Perl学习04之IO及文件读写

Perl学习05之正则表达式

Perl学习06之一行式操作

Perl学习07之自增(++)自减(--)

Perl学习08之子程序


持续更新,欢迎您"关注"、"在看"、"分享"


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存