2009-01-13 6 views
1

J'ai un format de fichier similaire à "IDY03101.200901110500.axf". J'ai environ 25 fichiers similaires résidant dans un dépôt FTP et je veux télécharger tous ces fichiers similaires uniquement pour la date actuelle. J'ai utilisé le code suivant, qui ne fonctionne pas et je crois que l'expression régulière est incorrecte.Comment télécharger via FTP tous les fichiers avec une date en cours dans leur nom?

 
my @ymb_date = "IDY.*\.$year$mon$mday????\.axf"; 

foreach my $file (@ymb_date) 
{ 

print STDOUT "Getting file: $file\n"; 

$ftp->get($file) or warn $ftp->message; 

} 

Toute aide appréciée.

EDIT:

Je besoin de tout le fichier en cours de jours. en utilisant ls -lt | grep "Jan 13" fonctionne dans la boîte UNIX mais pas dans le script Que pourrait être une regex vaild dans ce scénario?

Répondre

1

Je ne pense pas que les expressions régulières fonctionnent comme ça. Bien que cela fait un moment que j'ai fait Perl, je pourrais être loin de là. :)

Votre objet $ftp a-t-il accès à une méthode mget()? Si oui, peut-être essayer cela?

$ftp->mget("IDY*.$year$mon$mday*.axf") or warn $ftp->message; 
3

Il ne semble pas que vous utilisiez une expression régulière. Vous essayez d'utiliser le modèle littéral comme nom de fichier à télécharger.

Vous souhaitez peut-être utiliser la méthode ls de Net::FTP pour obtenir la liste des fichiers, puis les filtrer.

foreach my $file ($ftp->ls) { 
    next unless $file =~ m/$regex/; 
    $ftp->get($file); 
    } 

Vous aimerez aussi les réponses qui parlent de la mise en œuvre mget pour "Net::FTP" à PerlMonks.

Aussi, je pense que vous voulez l'expression rationnelle qui trouve quatre chiffres après la date. En Perl, vous pouvez écrire cela comme \d{4}. Le ? est un quantificateur en Perl, donc quatre d'entre eux ne fonctionnent pas.

IDY.*\.$year$mon$mday\d{4}\.axf 
+0

Il convient également de souligner que "IDY. * \ $ Year $ mon $ mday ???? \. Axf" n'est pas une regex valide. qr // et quotemeta seraient aussi de bonnes choses à lire pour le PO. – jrockway

Questions connexes