Você pode simplesmente dividir o caminho em seus nós constituintes e pesquisar cada um deles discretamente. É um script bash
.
IFS=/; dn=($1); ct=${#dn[@]}
for((i=0; i<ct; i++)); do
subd+=/"${dn[i]}"
dots=$(for((j=ct-i; j>1; j--)); do printf "../"; done)
find "$subd" -maxdepth 1 -type f -name "$2" -printf "$dots%f\n"
done
executar upfind $HOME/zt" "Y*"
..., que produz a seguinte saída
quando YABBA existe em / , / home / usuário , / home / user / zt
../../../YABBA
../YABBA
YABBA