Por que você não pode tornar todos os links simbólicos relativos? Isso faria o truque.
Assumindo que no servidor NFS (1.2.3.4), você tem o seguinte montado (diferentes unidades físicas possíveis)
/media/drive1/pictures/
/media/drive2/pictures/
/media/drive3/pictures/
/media/drive4/pictures/
# ...
No script, mude sua linha ln de
ln -s "$item" "$target"
para ler
ln -s "../${item#/media/}" "$target"
Isso criaria seus links simbólicos no formato
../drive1/pictures/...
Como você mencionou que é uma rede privada e a segurança não é uma preocupação, você pode definir as exportações para
### /etc/exports
/media *(ro,async)
Em seguida, nas caixas do cliente que montam o NFS
mkdir -p foo; mount 1.2.3.4:/media foo
Em foo, você verá share, drive1, drive2, drive3, drive4, ...
Então, na verdade, você montou todo o diretório de mídia em seu cliente, e os links simbólicos são relativos para que funcionassem bem. A quantidade de mudança necessária é mínima, a sintaxe ${item#/media/}
pode ou não ser suportada pela sua versão do bash, qualquer equivalente faria (você pode usar comandos sed, awk ou qualquer coisa que você esteja familiarizado para cortar o / media /).
O único problema que resta são os nomes exclusivos, se você tiver a seguinte pasta ou arquivo
/media/drive1/pictures/same_name1
/media/drive2/pictures/same_name1
O código atual
if [ ! -d "$target" ]; then
ln -s "$item" "$target"
chown -h lsc:lsc "$target"
fi
Ignoraria a criação de um link simbólico após o primeiro destino ser encontrado. Então você pode ter arquivos que estão faltando links simbólicos puramente porque o nome já é usado em outra unidade.
Você precisaria modificar seu nome de link simbólico para acrescentar algum tipo de identificador exclusivo para esses casos.
if [ -d "$target" ]; then
#extract out the "drive1" part from $item and prepend it to target
target="$(echo item | sed -e 's!/media/\([^/]*\)/pictures.*!!g')_${target}"
fi
if [ ! -d "$target" ]; then
ln -s "$item" "$target"
chown -h lsc:lsc "$target"
fi