#!/usr/bin/perl
#---------------------------------------------------------
use strict;
my $dir = "dirname/";
opendir DH, $dir or die "cannot chdir to $dir : $!"for $file (readdir DH)
{
$file eq '.') and next'..'if time) - stat$dir.$file)[9] > (60*60unlink $file}
print $file."n"closedir DH;
#---------------------------------------------------------
删除60*60秒前的文件。
perl下的stat函数和shell下的stat命令的功能基本一致,也是取得文件的各类具体信息:
stat()函数返回一个数组,下面是数组各个元素的含义:
0???? dev????? 设备号 驱动器号(C:通常是2,D:通常是3,等等)
1???? ino????? 索引节号 总是0
2???? mode?? 文件的方式 无
3 nlink ?? 链接号 通常为0;Windows NT;文件系统允许链接
4???? uid????? 文件所有者的用户ID(UID)总是0
5???? gid????? 文件所有者的组ID(GID)总是0
6???? rdev???? 特殊文件信息 驱动器号(重复)
7???? size???? 文件大小(以字节计)文件大小(以字节计)
8???? atime??? 上次访问的时间 上次访问的时间
9???? mtime??? 上次修改的时间 上次修改的时间
10??? ctime??? Inode修改时间 文件的创建时间
11 ?? blksz??? 磁盘块的大小 总是0
12 ?? blocks?? 文件中的块的数量 总是0
例子:
获取某个文件的创建时间和最后一次修改时间,
my @array = stat("test.html");
?? print "$array[10]n";
?? print "$array[8]n";
perl如何得到文件夹下所有文件名
---------------------------------------------------------------
调用系统命令dir或者ls,将其输出再放入一个数组就可以了.
---------------------------------------------------------------
opendir(DIR,$dir_name) || die "Can't open directory $dir_name";
@dots = readdir(DIR);
foreach?? (@dots){
???????? print;
???????? print "n";
}
closedir DIR;
----------------------------------------------------------------
还有一种方法可以获得一个目录下所有的目录和文件名,例如:
my @files=glob("c:*");
但是和上面打开目录的方法有区别,打开目录读取后是纯粹的目录和文件名
glob所获得的目录和文件名带有路径,是全路径文件和目录名。
如果使用当前目录则可以:
my @files=glob("*");
这样获得的目录和文件名不包括路径。
在使用中可以根据自己的目的加以选择。
#----------------------------------------------------
一、在目录树上移动
程序在某个工作目录(working directory)下运行,这是相对路径的起点。
chdir可以改变工作目录。它和Unix shell,Win command下的cd命令类似。
错误发生时将给变量$!赋值。通常应当检查$!的值,因为它将告诉你chdir失败的原因。
工作目录会被Perl启动后的所有进程所继承。但是对于调用Perl的进程的工作目录将不会改变,因此,不能写一个Perl程序来代替shell下的cd命令。
二、Globbing
通常,shell将每个命令行中的任何的文件名模式转换成它所匹配的文件名。这被称作globbing。例如,在echo命令后使用了文件名模式*.pm,shell会将它转换成它所匹配的文件名。
my @all_files = glob "*";
foreach $v (@all_files)
{
print $v."n";
}
@all_files得到了当前目录下的所有文件,这些文件按照字母排序的,不包括由点(.)开头的文件。
my @all_files = glob ".* *";
foreach $v (@all_files)
{
print $v."n";
}
这里,我们包括了额外的 点星号(.*) 参数,来得到所有的文件(由点开头的文件,以及不由点开头的文件)。引号中两个项之间的空隔是必须的。
#---------------------------------------------------------------------
chdir "/test" or die "打开目录出错:$!";
stat函数
perl下的stat函数和shell下的stat命令的功能基本一致,也是取得文件的各类具体信息:
stat()函数返回一个数组,下面是数组各个元素的含义:
0???? dev????? 设备号 驱动器号(C:通常是2,D:通常是3,等等)
1???? ino????? 索引节号 总是0
2???? mode???? 文件的方式 无
3???? nlink??? 链接号 通常为0;Windows NT;文件系统允许链接
4???? uid????? 文件所有者的用户ID(UID)总是0
5???? gid????? 文件所有者的组ID(GID)总是0
6???? rdev???? 特殊文件信息 驱动器号(重复)
7???? size???? 文件大小(以字节计)文件大小(以字节计)
8???? atime??? 上次访问的时间 上次访问的时间
9???? mtime??? 上次修改的时间 上次修改的时间
10??? ctime??? Inode修改时间 文件的创建时间
11??? blksz??? 磁盘块的大小 总是0
12??? blocks?? 文件中的块的数量 总是0
例子:
例:获取文件时间
my @array = stat("mysql.tar.gz");
?? print "$array[9]n";
localtime函数
localtime函数,根据它所在的上下文,可以用两种完全不同的方法来运行。在标量上下文中,localtime函数返回一个格式化很好的当前时间字符串。例如,print scalar (localtime)这个代码,它输出的结果将类似于Thu Sep 16 23:00:06 1999。在列表上下文中,localtime将返回能够描述当前时间的一个元素列表:
($sec,$min,$hour,$mday,$mon,$year_off,$wday,$yday,$isdat) = localtime;
字段??? 值
$sec ??? 秒,0 ~ 59
$min ??? 分,0 ~ 59
$hour ??? 时,0 ~ 23
$mday ??? 月份中的日期, 1 ~ 2 8、2 9、3 0或3 1
$mon ??? 年份中的月份, 0 ~ 11(这里请特别要小心)
$year_off ?? 1900年以来的年份。将1900加上这个数字,得出正确的4位数年份
$wday ??? 星期几,0 ~ 6
$yday ??? 一年中的第几天,0 ~ 364或365
$isdst ??? 如果夏令时有效,则为真
不要将19附加给localtime返回的年份。它返回的年份是1900的偏移量。比如,在1999年,年份是99;在2000年中,它是100,将1999与该值相加,可以在2000年以后正确地产生年份。perl不存在2000年问题,但是,如果简单地将19(或20)附加给该年份,就会导致程序中产生2000年问题。
my?? ($sec,$year) = (localtime)[0..5];
($sec,$year) = (
sprintf("%02d",$sec),
sprintf("%02d",$min),$hour),$mday),$mon + 1),
$year + 1900
);
print "$year-$mon-$mday $hour:$min:$secn";
得到的结果是:2009-01-21 15:44:23