Dotfiles, utilities, and other apparatus.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
1.8 KiB

12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
  1. #!/usr/bin/env perl
  2. =pod
  3. =head1 NAME
  4. photocp - copy files from digital camera media to my home dir
  5. =head1 SYNOPSIS
  6. # try a couple of defaults
  7. photocp
  8. # look in source_directory
  9. photocp [source_directory]
  10. =head1 AUTHOR
  11. Brennen Bearnes
  12. =cut
  13. use strict;
  14. use warnings;
  15. use 5.10.0;
  16. use POSIX qw(strftime);
  17. use File::Basename;
  18. use File::Copy;
  19. use File::Find;
  20. use File::HomeDir;
  21. my $home = File::HomeDir->my_home;
  22. my $archive_dir = $home . '/workspace/photos';
  23. my @sources = (
  24. '/media/' . $ENV{'USER'} . '/EOS_DIGITAL',
  25. '/media/' . $ENV{'USER'} . '/CANON_DC',
  26. '/media/' . $ENV{'USER'} . '/NIKON D600',
  27. '/media/' . $ENV{'USER'} . '/NO NAME',
  28. '/media/' . $ENV{'USER'} . '/9016-4EF8',
  29. '/media/CANON_DC',
  30. '/media/EOS_DIGITAL',
  31. '/media/disk/DCIM',
  32. '/media/NIKON D600',
  33. '/run/user/1000/gvfs/' # XXX: this is lame.
  34. );
  35. my @t = localtime;
  36. my $daydir = strftime("%Y-%m-%d", @t);
  37. my $src;
  38. if ((defined $ARGV[0]) && (-d $ARGV[0])) {
  39. $src = $ARGV[0];
  40. } else {
  41. foreach my $source (@sources) {
  42. if (-d $source) {
  43. $src = $source;
  44. last;
  45. }
  46. }
  47. unless ($src) {
  48. die 'source not mounted? tried ' . join(' ', @sources);
  49. }
  50. }
  51. my $dest = $archive_dir . '/' . $daydir;
  52. if ((-e $dest) && (! -d $dest)) {
  53. die 'target exists but is not a directory';
  54. }
  55. if (! -d $dest) {
  56. say "creating $dest";
  57. mkdir($dest);
  58. } else {
  59. say "$dest exists";
  60. }
  61. my $count = 0;
  62. find(
  63. sub {
  64. if ( /[.] (jpe?g | mpe?g | avi | raw | cr2 | tiff? | bmp | gif | mov) $/ix ) {
  65. $count++;
  66. my $copy_to = "$dest/$_";
  67. if (-e $copy_to) {
  68. say "$copy_to already exists - skipping copy";
  69. } else {
  70. say "copying $File::Find::name to $copy_to";
  71. copy($File::Find::name, $copy_to)
  72. or die "copy failed: $!";
  73. }
  74. }
  75. },
  76. $src
  77. );
  78. say "$count files copied";