如何检查文件是否存在并通过子字符串获取文件大小?

geo*_*rea -3 perl file-extension file filesize

我有一个目录将创建像'2018-08-14-9-22-4'这样的日常文件,创建的文件名是yyyy-mm-dd-hms,如何通过像'2018-这样的子字符串检查文件是否存在08-14'?并获取文件全名和文件大小?

my $file =  "$yy-$mm-$dd-$hh-$mm-$ss";
my $path = '/home/httpd/doc/$user/$year/[every day file]'
Run Code Online (Sandbox Code Playgroud)

Jos*_*hua 5

最简单的方法是在 中使用模式匹配glob,然后stat在文件上使用。

for my $name ( glob('2018-08-14-*') ) { 
    my $size = ( stat($name) )[7];
    say "name is '$name', size is $size bytes";
}
Run Code Online (Sandbox Code Playgroud)

或者更好...使用 File::stat

use File::stat;

for my $name ( glob('2018-08-14-*') ) { 
    my $size = stat($name)->size;
    say "name is '$name', size is $size bytes";
}
Run Code Online (Sandbox Code Playgroud)

我在r/perl上回答了一个类似的问题,如果你对做你想做的事情的不同方式感兴趣,那值得一读

更新

如果你已经创建了一个文件名变量,并且你想检查它是否存在,只需使用文件测试操作符

my $file =  "$yy-$mm-$dd-$hh-$mm-$ss";
my $path = "/home/httpd/doc/$user/$year/";

if (-e $path) { say "$path exists" }
if (-d $path) { say "$path is a dir" }
if (-w $path) { say "$path is a writeable" }

if (-e "$path/$file" && -r "$path/$file" ) {
    say "$path/$file exists and is readable"
}
Run Code Online (Sandbox Code Playgroud)