rsync is a good solution, but be aware that it doesn't preserve access times. pax (see my answer below) does.
–
jaumeFeb 18 '13 at 10:26

As far as I know, "rsync" forgets the creation date and instead sets it to the modif date. Which is a big failure.
–
Nicolas BarbulescoSep 3 '14 at 9:20

→ jaume: any command making any form of copy of "file a" toward "file b" has to read "file a" first. Hence the access time of "file a" should be modified. This isn't a feature at the command level but at the kernel level. If a command, through another system call, restores the access time to its previous state, then this is a dangerous trick, because it is a plain lie.
–
daniel AzuelosSep 3 '14 at 10:15

-p Cause cp to preserve the following attributes of each source file in the copy: modification time,
access time, file flags, file mode, user ID, and group ID, as allowed by permissions. Access
Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also be pre-
served.
If the user ID and group ID cannot be preserved, no error message is displayed and the exit value
is not altered.
If the source file has its set-user-ID bit on and the user ID cannot be preserved, the set-user-
ID bit is not preserved in the copy's permissions. If the source file has its set-group-ID bit
on and the group ID cannot be preserved, the set-group-ID bit is not preserved in the copy's per-
missions. If the source file has both its set-user-ID and set-group-ID bits on, and either the
user ID or group ID cannot be preserved, neither the set-user-ID nor set-group-ID bits are pre-
served in the copy's permissions.

So, using zsh I was able to run (NO NAME being my cards volume name):

cp -rvp /Volumes/NO\ NAME/DCIM/**/*.{JPG,jpg} ~/Desktop/tmp/pics

I believe that the special /**/* construct is specific to ZSH; however you could do something like

+1 A simple cp -p is straight-forward, preserves the modified time (likely the most useful of the three timestamps on a file) and doesn't require creation of an intermediate archive file.
–
wberryJan 28 '14 at 19:57

As far as I know, "cp -p" forgets the creation date and instead sets it to the modif date. Which is quite an absurd behaviour.
–
Nicolas BarbulescoSep 3 '14 at 9:19

Use pax. The default pax format, called ustar, preserves file modification and access times (among other things like user ID, group ID, file mode bits and extended attributes like Spotlight comments and ACLs). See pax man page here for more details.

First, create a pax archive on every Mac and copy it to the external hard drive like this:

Open Applications>Utilities>Terminal.

Type in Terminal:

$ cd

and drag the folder where the files to be combined reside on that Mac to Terminal:

Alternatively you can type the full folder name:

$ cd /path/to/your\ folder

This will change the current folder to 'your folder'.

Archive the folder with pax:

$ cd ..
$ pax -w "your folder" > yourfolder.ustar

Use the Finder to copy the newly create archive yourfolder.ustar to the external hard drive.

Then extract the archives with pax:

Open Terminal on the Mac that has the external USB hard drive plugged in.

Change the current folder to the single folder hierarchy on the external hard drive with command cd as explained above: