आपको पायथन या पर्ल के साथ ऐसा करने के लिए एक स्क्रिप्ट लिखने की आवश्यकता होगी जो संभवतः आपका सबसे अच्छा दांव है।
यहाँ एक स्क्रिप्ट है जो मैंने पर्ल में लिखी है जो मूल रूप से (jpeg & amp; कच्ची फाइलें) करती है और उन्हें एक "दिनांकित निर्देशिका संरचना" में स्थानांतरित करती है (यानी YYYY / MM-month / DD)। इसका उपयोग करता है Image::ExifTool
पुस्तकालय को फोटो की तारीख निकालने के लिए यह जानने के लिए कि इसे कहां रखा जाए
अपने सटीक प्रश्न के लिए, आप देख सकते हैं कि यह सभी .jpg फाइलें ढूंढता है, बेसनेम का काम करता है, और फिर मिलान .nef फाइल की जांच करता है।
#! /usr/bin/perl
$dryrun = 0;
$encode = 1;
use Image::ExifTool;
use Dumpvalue;
my $Dumper = new Dumpvalue();
@Months = qw(00 01-January 02-February 03-March 04-April 05-May 06-June 07-July 08-August 09-September 10-October 11-November 12-December);
$startdir = shift @ARGV;
die "error: no start directory specified\n" unless ($startdir ne "");
foreach $file (split(/\n/,`find "$startdir" -name "*.[Jj][Pp][Gg]" -print | sed -e 's,^\./,,'`)) {
next if ($file =~ m,(^|/).xvpics/,);
print STDERR "$file => ";
my $exif = new Image::ExifTool;
$info = $exif->ImageInfo($file);
if (ref($info) != "HASH") {
print STDERR "error: could not read exif data from '$file' ($@)\n";
next;
}
($filename) = ($file =~ m,([^/]+)$,);
# $Dumper->dumpValue($info);
# next;
# exit(1);
$date = $info->{"CreateDate"};
#print STDERR $date," => ";
unless (($y,$m,$d,$h,$n,$s) = ($date =~ m/^(\d\d\d\d)\D(\d\d)\D(\d\d)\D+(\d\d)\D(\d\d)\D(\d\d)($|\D)/)) {
$date = $info->{"FileModifyDate"};
unless (($y,$m,$d,$h,$n,$s) = ($date =~ m/^(\d\d\d\d)\D(\d\d)\D(\d\d)\D+(\d\d)\D(\d\d)\D(\d\d)($|\D)/)) {
print STDERR "$file: no date for '$file' (skipped)\n";
next;
}
}
next if ($file eq "$outdir/$filename");
system("mkdir","-p",$outdir) unless (-d $outdir || $dryrun);
print STDERR "$outdir/".$filename;
rename($file,"$outdir/".$filename) unless $dryrun;
$jpgfile = $filename;
$file =~ s/\....$/\.nef/;
$filename =~ s/\....$/\.nef/;
if (-f $file) {
print STDERR " ($outdir/$filename)";
rename($file,"$outdir/".$filename) unless $dryrun;
chmod(0644, "$outdir/".$jpgfile) unless $dryrun;
}
print STDERR "\n";
}
ये है नहीं उच्च गुणवत्ता वाला कोड। :-) यह एक हैक है जिसे मैंने अपने लिए लिखा था लेकिन इसे एक उचित उदाहरण के रूप में प्रस्तुत करना चाहिए।