Ich versuche, Perl zu verwenden, um Dateien basierend auf dem Ordner, in dem sie sich befinden, und der Zeit, die erstellt wird, umzubenennen. Die Dateien GOPR1521.MP4 und GOPR7754.MP4 wurden auf zwei verschiedenen Kameras zur gleichen Zeit und zum gleichen Datum erstellt, und ich möchte ihre Namen darauf hinweisen können. Zum Beispiel .../GoProTravisL/GOPR1521.mp4 erstellt um 12:32:38 sollte 123238L_GOPR1520.mp4 werden, und GOPR7754.MP4 wird 123239R_GOPR7754.MP4. Im Moment ist das einzige Problem die Zeitstempel. Ich denke, es ist ein Problem mit der falschen Zeitzone oder Stundenversatz, aber die Minuten sind auch aus. Gibt es etwas in Perl, das ich vermisse, wenn ich Zeitstempel bekomme? Unten ist der Perl-Code, was er für Zeiten für jede Datei ausgibt, und welcher Finder unter OS X sagt, dass die Erstellungszeiten sind.Perls Abruf der Datei Erstellungszeit falsch
Code:
#!/usr/bin/perl
use Time::Piece;
use File::stat;
use File::Find;
use File::Basename;
use File::Spec;
@files = <$ARGV[0]/>;
find({ wanted => \&process_file, no_chdir => 1 }, @files);
sub process_file {
my($filename, $dirs, $suffix) = fileparse($_,qr/\.[^.]*/);
if ((-f $_) && ($filename ne "")) {
#print "\n\nThis is a file: $_";
#print "\nFile: $filename";
#print "\nDIR: $dirs";
my(@parsedirs) = File::Spec->splitdir($dirs);
my @strippeddirs;
foreach my $element (@parsedirs) {
push @strippeddirs, $element if defined $element and $element ne '';
}
$pardir = pop(@strippeddirs);
#print "\nParse DIR: ", $pardir;
#print "\nFile creation time: ";
$timestamp = localtime(stat($_)->ctime)->strftime("%H%M%S"); #gives time stamp
print $timestamp;
$newname = $timestamp . substr($pardir,-1) ."_". $filename . $suffix;
print "\nRename: $dirs$filename$suffix to $dirs$newname\n";
#rename ($dirs . $filename . $suffix,$dirs . $newname) || die ("Error in renaming: " . $!);
} else {
print "\n\nThis is not file: $_\n";
}
}
Ausgabe der Zeitstempel für jede Datei:
/Volumes/Scratch/Raw/2016-03-21/GoProTravisL/
File: GOPR1520
File creation time: 05-55-21
File: GOPR1521
File creation time: 05-56-18
File: GOPR1522
File creation time: 05-57-44
File: GOPR1523
File creation time: 05-58-49
File: GP011520
File creation time: 05-59-53
/Volumes/Scratch/Raw/2016-03-21/GoProTravisR
File: GOPR7754
File creation time: 06-02-48
File: GOPR7755
File creation time: 06-04-19
File: GOPR7756
File creation time: 06-06-27
File: GOPR7757
File creation time: 00-06-16
File: GP017754
File creation time: 00-19-30
File: GP027754
File creation time: 00-22-20
tatsächliche Dateizeiten mit ls:
MacTravis:2016-03-21 travis$ ls -lR /Volumes/Scratch/Raw/2016-03-21
total 0
drwxr-xr-x 8 travis admin 272 Apr 9 21:25 GoProTravisL
drwxr-xr-x 9 travis admin 306 Apr 9 21:25 GoProTravisR
/Volumes/Scratch/Raw/2016-03-21/GoProTravisL:
total 21347376
-rw------- 1 travis admin 4001240088 Mar 21 12:04 GOPR1520.MP4
-rw------- 1 travis admin 1447364149 Mar 21 12:31 GOPR1521.MP4
-rw------- 1 travis admin 2140532053 Mar 21 12:45 GOPR1522.MP4
-rw------- 1 travis admin 1649133454 Mar 21 13:00 GOPR1523.MP4
-rw------- 1 travis admin 1691562945 Mar 21 12:21 GP011520.MP4
/Volumes/Scratch/Raw/2016-03-21/GoProTravisR:
total 31941008
-rw------- 1 travis admin 4001129586 Mar 21 12:04 GOPR7754.MP4
-rw------- 1 travis admin 2166255754 Mar 21 12:31 GOPR7755.MP4
-rw------- 1 travis admin 3202301883 Mar 21 12:45 GOPR7756.MP4
-rw------- 1 travis admin 2466803806 Mar 21 12:08 GOPR7757.MP4
-rw------- 1 travis admin 4001257192 Mar 21 11:27 GP017754.MP4
-rw------- 1 travis admin 516025454 Mar 21 11:29 GP027754.MP4
Diese kleine Änderung machte den Unterschied. Vielen Dank. – traisjames