Вам нужно будет написать скрипт, чтобы сделать это с Python или Perl, вероятно, будет лучшим выбором.
Вот скрипт, который я написал на Perl, который в основном это делает (файлы jpeg и raw) и автоматизирует их перемещение в "устаревшую структуру каталогов" (т.е. 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";
}
Это не качественный код. :-) Это хак, который я написал для себя, но должен послужить разумным примером.