I'm finding my iPhone photo download workflow to be a bit cumbersome.

Here are my requirements:

  • Download photos+video off my iPhone Camera Roll, but keep photos on iPhone
  • Only display/download new photos+video on iPhone since last download
  • Avoid iPhoto, ideally, because it makes me a bit nervous
  • Have all my iPhone-taken photos+video available to view on my iPhone
  • Maintain all EXIF/GPS metadata at all costs

Currently, I use regular folder structure + Picasa for all of my digital photos, however for my iPhone, I use iPhoto because it will "only display new items" when I go to import photos off my iPhone

I'm finding that will 5000+ photos+videos on my iPhone, iPhoto generally takes a while (2-10 minutes) to 'find' my iPhone after I plug it in.

Ideally, I'd like to just use OSX's built in ImageCapture.app to download iPhone photos, but it loads/displays ALL the photos, not just the new ones since last sync (as iPhoto does..). I then have to know which was the last downloaded iPhone photo and download only the newer ones.

Picasa Import also loads/displays ALL photos on the iPhone (which is very cumbersome with so many images to load off the device...)

I guess I'd like to know if anyone has a similar workflow/requirements and how they do it.

My current plan is to set up a workflow that removes photos from the Camera Roll as I download them, but then have iTunes sync them back on as albums based on folders - I may even automatically resize them so I have smaller versions on the iPhone and the original full size versions on my Mac (so conserve previous iPhone storage space)


Here is a working solution but it's probably not the simplest. LifeHacker recently posted an article describing a program that makes your iPhone appear as a normal mounted disk in the Finder: http://lifehacker.com/5582529/phone-disk-mounts-iphone-ipod-touch-and-ipad-as-usb-disks-in-finder The program in question can be found here: http://www.macroplant.com/phonedisk/ and at the moment the authors are giving it away free, which is nice of them. I've tried this using my non-jail broken iPhone 3GS and I can successfully navigate files on my iPhone using the Finder, including my pictures & movies (though some system files are remain hidden because my phone isn't jail broken). Pictures & movies are stored in the familiar sounding DCIM folder on the iPhone.

The next step then is to automate the copying process so that you copy only new files. Though unlike FAT32 formatted memory cards, where (in my experience) the archive bit is set on the files that have been previously downloaded files/photos, there doesn't seem to be the ability to read or set an equivalent flag on the mounted iPhone disk. I don't know if this is a limitation of the program or of the disk format of the phone itself (I'm guessing the program).

So my suggestion is to use a bash script that saves zero-byte file on the phone where the timestamp of the file indicates when the photos were last synced. This file can then be used with the standard 'find' terminal command to copy only newer files than this file. Below is a sample bash script that I wrote for this purpose & it works for me. Save the script as a file to your home directory, say called "photoSync.sh". Then (with the iphone mounted) from a terminal window change the current directory to the iPhone root directory and then run the script, giving the destination directory as the first argument to the script. E.g.

cd /Volumes/MyIPhone\(Media\)/
sh ~/photoSync.sh ~/Pictures/iPhonePics

Here is the script:


#test that script has been called correctly & from the right place
if [ ! -n "$1" ]
    echo "Usage: $0 <destination dir>"
    exit 1

if [ ! -d $1 ]
    echo "Destination directory does not exist or is not a directory"
    exit 1

if [ ! -d "DCIM" ]
    echo "Current directory does not contain a DCIM folder. Script should be executed from mount directory of iPhone"
    exit 1

#tests passed, let's do the copying…
#check for last sync file…
if [ -e "com.jn.lastsynctime" ]
    #we've synced before, just grab newer files
    echo "Copying only files since last sync..."
    find ./DCIM/* \( -name "*.JPG" -or -name "*.MOV" -or -name "*.PNG" \) -type f -newer com.jn.lastsynctime -exec cp -np {} $1 \; -print
    #reset sync file
    rm com.jn.lastsynctime
    touch com.jn.lastsynctime
    echo "Done"
    #no sync file so copy all and set sync file
    echo "No previous sync marker found, copying all files…"
    find ./DCIM/* \( -name "*.JPG" -or -name "*.MOV" -or -name "*.PNG" \) -type f -exec cp -np {} $1 \; -print
    touch com.jn.lastsynctime
    echo "Done"

exit 0
  • wow. thanks. I can't believe it requires such a heavy, manual workflow to accomplish this. Are you using this workflow for similar requirements? Jul 19 '10 at 2:08
  • Yeah, this does seem a little overkill though it's really strange how there's nothing on Google about to solve this otherwise. I did read that Image Capture pre-Tiger was scriptable & it sounds exactly what you need, so it's strange that Image Capture in Tiger+ removes this scripting feature. I don't have as many pictures as you on my iPhone but I also do want to grab only the latest pics. It seems an oversight that most programs appear unable to determine this.
    – Buxtor
    Jul 19 '10 at 21:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.