Algo como
find . -type f -printf "%f:%p\n" | awk -F: '!seen[$1]++ {print $2}'
Vamos procurar imprimir o nome de base para você e, em seguida, usar o awk para imprimir o nome do caminho apenas da primeira vez que <<> o nome da base for visto.
Eu usei dois pontos como um separador de campo e uma nova linha como o separador de registro (padrão). Ambos são caracteres de nome de arquivo válidos. Este usa o caractere nulo como o separador de registro (não é legal para nomes de arquivos) e é mais robusto
find . -type f -printf "%ffind . -type f -printf "%f:%p\n" | awk -F: '!seen[$1]++ {print $2}'
%pfind . -type f -printf "%f%pre%%p%pre%" |
awk -v RS='%pre%' '{basename=$0; getline} !seen[basename]++'
" |
awk -v RS='%pre%' '{basename=$0; getline} !seen[basename]++'