Erro ao tentar chamar find from perl

0
use warnings;
use File::Find;

my $srceDir = "//mnt/Share_Drive/Verizon PM&T/Capture Files/";
opendir(DIR, $srceDir) or die "Can't open $srceDir: $!";
my @files = (find -type f -newermt "12 Feb 2013", $srceDir);
closedir(DIR);

Eu posso executar o comando find com a opção -newermt no Linux bem, mas quando eu coloco no script perl eu recebi os erros abaixo, você poderia ajudar? Obrigado

String found where operator expected at ./queryAlm.pl line 11, near "newermt "12 Feb 2013""
  (Do you need to predeclare newermt?)
syntax error at ./queryAlm.pl line 11, near "newermt "12 Feb 2013""
    
por oanh 13.02.2013 / 18:02

1 resposta

2

O módulo File::Find perl tem pouco ou nenhum a ver com o comando find . Veja perldoc File::Find para saber como usá-lo.

Como o jordanm aponta, você pode usar find2perl para ajudá-lo a escrever esse perl code, mas observe que find2perl apenas reconhece a sintaxe padrãofind, então normalmente não são extensões GNU como -newermt . Você terá que escrever o código perl por conta própria (chame stat() para o arquivo e compare o mtime com POSIX::mktime(0,0,0,12,2,113) ).

Para executar o comando find , você não precisa do módulo File::Find , você pode simplesmente fazer:

my $srceDir = "//mnt/Share_Drive/Verizon PM&T/Capture Files/";
my @find_cmd = ("find", $srceDir, "-type", "f", "-newermt", "12 Feb 2013", "-print0");

open FIND, "-|", @find_cmd;
$/ = "
my $srceDir = "//mnt/Share_Drive/Verizon PM&T/Capture Files/";
my @find_cmd = ("find", $srceDir, "-type", "f", "-newermt", "12 Feb 2013", "-print0");

open FIND, "-|", @find_cmd;
$/ = "%pre%";
my @files = <FIND>;
my $ret = close FIND or warn $! ?
    "Error closing find pipe: $!" :
    "find exited with non-zero exit status: $?";
"; my @files = <FIND>; my $ret = close FIND or warn $! ? "Error closing find pipe: $!" : "find exited with non-zero exit status: $?";
    
por 13.02.2013 / 18:31

Tags