Entre guillemets, le shell interprète les variables (il remplace $src_home_jarodd par /home/jarodd/, par exemple) mais pas les caractères spéciaux. Dans tes exemples, il ne remplace pas l'étoile par
tous les fichiers, il cherche un fichier qui s'appelle
*.prf, d'où le message d'erreur qui te dit qu'il n'existe pas. De la même façon, pour désigner ton dossier perso, tu peux utiliser $HOME entre guillemets mais pas ~ (il cherche alors un dossier qui s'appelle
~).
Ça devrait fonctionner en les supprimant :
cp -pr $src_home_jarodd.unison/*.prf $dst_unison
EDIT : j'ajoute qu'il y a une différence entre les guillemets doubles et les guillemets simples (" et '). Si tu mets une chaîne entre guillemets simples, les variables d'environnements telles que $src_home_jarodd ou $HOME ne seront pas interprétées.
EDIT 2 : l'intérêt des guillemets est surtout de traiter des chemins qui peuvent avoir des espaces dans leur nom, et éviter qu'ils soient interprétés comme des séparateurs. En effet, si par exemple ta variable $src_home_jarodd correspond au chemin
/home/jarodd/mon chouette dossier/ et que tu lances la commande suivante :
cp -pr $src_home_jarodd.unison/*.prf $dst_unison
cp va recevoir en paramètres
/home/jarodd/mon,
chouette et
dossier/.unison/*.prf, ce qui ne correspondra à rien. Pour éviter ça, il faudrait donc mettre des guillemets. Mais l'étoile ne sera alors pas interprétée. Dans ce genre de cas, je ne pense pas qu'il y ait un autre moyen que d'abord se déplacer dans le dossier en utilisant des guillemets autour de la variable, puis de copier les fichiers sans utiliser de guillemets :
cd "$src_home_jarodd.unison"
cp -pr *.prf "$dst_unison"
(Du coup, autant mettre des guillemets autour de la variable désignant le dossier de destination pour les mêmes raisons.)