...per your [comment on the question](https://unix.stackexchange.com/questions/217218/how-to-copy-recursively-and-change-file-names-to-be-unique#comment368945_217218)...

<!-- language: shell -->

 pax -rws'/\.JPG$/.CAP&/' /root/of/copied/tree /dest/path

If *`.jpg`* and *`.JPG`* are your only issues, that should just work.

You can also add a `p`rint primitive to the filename substitution to get a list of all of those filenames which were changed:

<!-- language: shell -->

 pax -rws'/\.JPG$/.CAP&/p' /root/of/copied/tree /dest/path

As near as I can tell, `pax` should already be installed on an OSX system, and so this should amount to a pretty stress-free solution overall.

If the problems turn out to be more profound after all, though, it may also be of interest to you that `pax` supports...

> `-i`
>> Interactively rename files or archive members. For each archive member matching a pattern operand or each file matching a file operand, `pax` will prompt to `/dev/tty` giving the name of the file, its file mode, and its modification time. `pax` will then read a line from `/dev/tty`. If this line is blank, the file or archive member is skipped. If this line consists of a single period, the file or archive member is processed with no modification to its name. Otherwise, its name is replaced with the contents of the line. `pax` will immediately exit with a non-zero exit status if EOF is *(`CTRL+D`)* encountered when reading a response or if `/dev/tty` cannot be opened for reading and writing.