如何检查perl中特定目录中是否存在文件?

时间:2011-01-28 04:34:06

标签: perl

如何检查perl中特定目录中是否存在特定文件? 检查绝对目录名是绝对文件名前缀的明显方法不起作用,因为有时候绝对目录名就像是/ a / b / c /.../ p>

3 个答案:

答案 0 :(得分:1)

可以使用

File::Findfind函数:

程序

#!/usr/bin/env perl                                                                                    

use strict;                                                                                            
use warnings;                                                                                          

use File::Find 'find';                                                                                 


# file 'foo' in path 'a/b/c'
my $file      = 'foo';                                                                                 
my $directory = 'a';                                                                                   

sub check_existance {                                                                              
    if ( -e $_ && $_ eq $file ) {                                                                      
        print "Found file '$_' in directory '$File::Find::dir'\n";                                     
    }                                                                                                  
}                                                                                                      

find( \&check_existance, $directory );

输出

Found file 'foo' in directory 'a/b/c'                                                                  

答案 1 :(得分:1)

如果您不知道可以使用find2perl的确切路径。它会为您生成File::Find::find()代码。要立即执行命令:

$ find2perl /path/to/dir -name filename.txt -exec echo exists {} | perl

find2perl

生成的代码
#! /usr/bin/perl -w
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if 0; #$running_under_some_shell

use strict;
use File::Find ();

# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.

# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;

sub wanted;
sub doexec ($@);

use Cwd ();
my $cwd = Cwd::cwd();

# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/path/to/dir');
exit;

sub wanted {
    /^filename\.txt\z/s &&
    doexec(0, 'echo','exists','{}');
}

sub doexec ($@) {
    my $ok = shift;
    my @command = @_; # copy so we don't try to s/// aliases to constants
    for my $word (@command)
        { $word =~ s#{}#$name#g }
    if ($ok) {
        my $old = select(STDOUT);
        $| = 1;
        print "@command";
        select($old);
        return 0 unless <STDIN> =~ /^y/;
    }
    chdir $cwd; #sigh
    system @command;
    chdir $File::Find::dir;
    return !$?;
}

答案 2 :(得分:0)

if (-e "/path/to/file/filename.txt") {
   print("file exists");
}