#!/usr/bin/env perl =pod =head1 NAME photocp - copy files from digital camera media to my home dir =head1 SYNOPSIS # try a couple of defaults photocp # look in source_directory photocp [source_directory] =head1 AUTHOR Brennen Bearnes =cut use strict; use warnings; use 5.10.0; use POSIX qw(strftime); use File::Basename; use File::Copy; use File::Find; use File::HomeDir; my $home = File::HomeDir->my_home; my @sources = ( '/media/' . $ENV{'USER'} . '/EOS_DIGITAL', '/media/' . $ENV{'USER'} . '/CANON_DC', '/media/' . $ENV{'USER'} . '/NIKON D600', '/media/CANON_DC', '/media/EOS_DIGITAL', '/media/disk/DCIM', '/media/NIKON D600' ); # strftime doesn't have a non-zero-padded month/day? # am i an idiot? my @t = localtime; my $daydir = strftime("%Y-%m-%e", @t); $daydir =~ s{-[0 ]}{-}g; my $src; if ((defined $ARGV[0]) && (-d $ARGV[0])) { $src = $ARGV[0]; } else { foreach my $source (@sources) { if (-d $source) { $src = $source; last; } } unless ($src) { die 'source not mounted? tried ' . join(' ', @sources); } } my $dest = $home . '/photos/' . $daydir; if ((-e $dest) && (! -d $dest)) { die 'target exists but is not a directory'; } if (! -d $dest) { say "creating $dest"; mkdir($dest); } else { say "$dest exists"; } my $count = 0; find( sub { if ( /[.] (jpe?g | mpe?g | avi | raw | cr2 | tiff? | bmp | gif | mov) $/ix ) { $count++; say "copying $File::Find::name to $dest/$_"; copy($File::Find::name, "$dest/$_") or die "Copy failed: $!"; } }, $src ); say "$count files copied";