2010-11-10 23 views
0

Lors de l'utilisation de tar-> write(), j'obtiens des erreurs lors de l'utilisation de noms de fichiers complexes.Erreur lors de l'utilisation de noms de fichiers complexes pour tar -> write in perl

Le code est:

my $filename= $archive_type."_".$from_date_time."_".$to_date_time."tar"; 
$tar->write($filename); 

L'erreur que je reçois est: Impossible de créer filehandle pour 'postProcessProbe_2010/6/23/3_2010/6/23/7.tar':

Non tel fichier ou répertoire à la ligne test.pl 24

Si je change le $ filename en une simple chaîne comme out.tar tout fonctionne.

Répondre

4

Eh bien, / est le séparateur de répertoire systèmes * nix (et, à l'intérieur de Windows traite / et \ interchangeable) et je crois que tar fichiers, quelle que soit la plate-forme utiliser en interne comme séparateur de répertoire.

Je ne pense pas que vous pouvez créer des noms de fichiers contenant / sur les systèmes * nix ou Windows. Même si vous le pouviez, cela créerait probablement tout un tas de maux de tête sur la route.

Il serait préférable à mon humble avis de passer à un format de date plus sain tel que YYYYMMDD.

En outre, vous utilisez la concaténation de chaîne quand sprintf aurait été beaucoup plus claire:

my $filename= sprintf '%s_%s_%s.tar', $archive_type, $from_date_time, , $to_date_time;

+0

Pas seulement sur Unix; sur Windows, aussi. – tchrist

+0

@thcrist Notez le ** le ** ;-) –