how to check file exists and get file size by substring?

早过忘川 提交于 2019-12-06 16:28:13

问题


I have a directory will create every day file like '2018-08-14-9-22-4', the file name created is by yyyy-mm-dd-h-m-s, how to check file is exists by substring like '2018-08-14' ? and get the file full name and file size ?

my $file =  "$yy-$mm-$dd-$hh-$mm-$ss";
my $path = '/home/httpd/doc/$user/$year/[every day file]'

回答1:


Simplest way would be to use the pattern matching in glob, and then use stat on the file.

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

or better yet... use 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";
}

I answered a similar question on r/perl that's worth reading if you interested in the different ways to do what you want

UPDATE

If you have created a filename variable, and you want to check if it exists, just use the file test operators

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"
}



回答2:


Your path should be double-quoted, if it contains variables. If the path is single-quoted, $file and $year won't get interpolated

use v5.10;
use strict;
use warnings;
use File::Basename;

my ($user,$year) = @ARGV;
my $check = '2018-08-14';

opendir my $dir_handle, "/home/httpd/doc/$user/$year/";

# use File::Basename to get the filename from each file in the dir
# use regex to check if each filename starts with the string to check for
while (readdir $dir_handle) {
    my $name = basename($_);
    if ($name =~ /^$check/) {
        say "$name found. size: ". -s $dir.$name;
    }
}


来源:https://stackoverflow.com/questions/51832909/how-to-check-file-exists-and-get-file-size-by-substring

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!