Some linux distributions have a program called "mmv" (e.g. debian). This can perform a rename based on pattern matching of filenames. In your case, the command you'd want is:
mmv 'DSCN*.JPG' 'dscn#1.jpg'
It interprets the filename pattern itself, rather than relying on shell expansion, so remember to quote the wildcards. In the destination pattern,
#1 refers to the first wildcard in the source pattern and so on. I'd suggest running
mmv -n 'DSCN*.JPG' 'dscn#1.jpg'
first, which will give a list of operations that will be performed as a dry run.
It can also handle recursively renaming, using the special
; pattern (which matches any number of subdirectory levels, similarly to the
** pattern used by some other tools). So to perform this operation recursively, the command is:
mmv ';DSCN*.jpg' '#1dscn#2.jpg'
It can also handle case transformation of the filenames itself, so if you weren't sure that all your files started with the DSCN prefix, for example, the following would work:
mmv '*.JPG' '#l1.jpg'
mmv '*' '#l1'
mmv ';*' '#1#l2'
to perform the rename recursively.
A new directory tree with hard links to the original files can be produced using the
mmv -l ';DSCN*.JPG' '../output/#1dscn#2.jpg'
I haven't tested this, but I believe it will create directories as necessary.