2010-12-29 6 views
0

Die direcrory Struktur, die ich somit erschaffe aktuellen Zeitstempel beinhaltet:Wie erstelle ich ein Verzeichnis in Perl, die als EPOCH

 
my $startTime = `date +%s`; 
my $startTime2 = $startTime + 10; 
chomp($startTime2); 
print "startTime2: " . "$startTime2"; 
my $pwd = getcwd(); 

#my $PWD=system("pwd"); 
print "Current Working Directory: " . "$pwd\n"; 
my $logdir = "$pwd" . "/load-logs"; 
print "Log Directory: " . "$logdir\n"; 
#chmod(755, $logdir) or die "Couldn't chmod $logdir: $!"; 

mkdir("$logdir/$startTime2", 777) || print $!; 
#print "start Time in epoc : "."$startTime"; 
#mkdir("$startTime3", 777) || print $!; 
#system("mkdir \$logdir/$startTime"); 

my $reqlogfile = "$logdir/$startTime2/req.log"; 
print "reqlogfile: " . "$reqlogfile\n"; 
my $resplogfile = "$logdir/$startTime2/resp.log"; 
print "resplogfile: " . "$resplogfile\n"; 

jetzt, mkdir ("$ logdir/$ startTime2", 777) || Druck $ !; erstellt kein Verzeichnis mit dem aktuellen Wert von $ startTime2 unter $ logdir

+1

my $startTime = 'date +%s';
ist absolut verschwenderisch. Verwenden Sie einfach 'my $ startTime = time();'. – user502515

Antwort

1

Ein Problem kann sein, dass Ihre $logdir wurde nicht erstellt, so ist es am besten zu gewährleisten, dass es erstellt wird.

Auch ist es am besten, um sicherzustellen, dass die umask zurückgesetzt wird, so dass Sie, wenn chmod-0777, die umask der Eltern Schale nicht mit den umask im Skript nicht stört.

Perls mkdir funktioniert nicht als mkdir -p der Shell (die Zwischenverzeichnisse erstellt, wenn sie nicht vorhanden sind). Man könnte mkpath von File :: Pfad verwenden oder einfach sicherstellen, dass der Zwischenpfad erstellt wird, wie ich weiter unten zeigen:

use strict; 
use warnings; 
use Cwd; 

my $start_time = time; # equivalent to `date +%s`, less a shell out ;) 
my $start_time_2 = $start_time + 10; 

umask 000; # ensure the permissions you set are the ones you get 

my $pwd = getcwd(); 
print "Current Working Directory: $pwd\n"; 

my $logdir = "$pwd/load-logs"; 
print "Log Directory: $logdir\n"; 

mkdir $logdir 
    or die "Cannot mkdir $logdir: $!" 
    unless -d $logdir ; 
chmod 0755, $logdir or die "Cannot chmod 0755 $logdir: $!"; 

mkdir("$logdir/$start_time_2", 0777) 
    or die "Cannot mkdir $logdir/$start_time_2: $!" 
    unless -d "$logdir/$start_time_2"; 

my $reqlogfile = "$logdir/$start_time_2/req.log"; 
print "reqlogfile: $reqlogfile\n"; 
my $resplogfile = "$logdir/$start_time_2/resp.log"; 
print "resplogfile: $resplogfile\n"; 

Die oben (mit strengem, Warnungen, etc.) funktioniert für mich:

~/t$ perl t.pl 
Current Working Directory: /home/mf/t 
Log Directory: /home/mf/t/load-logs 
reqlogfile: /home/mf/t/load-logs/1293636556/req.log 
resplogfile: /home/mf/t/load-logs/1293636556/resp.log 

Das mehrfache Starten stirbt nicht und erstellt die Verzeichnisse (und chmods), falls erforderlich. Sie können dies über ls -la load-logs/ überprüfen.

Verwandte Themen