Wenn ich dich richtig verstanden habe der -L Flag der cp Befehl sollte genau das tun, was Sie wollen.
Kopieren Sie einfach alle symbolischen Links und sie werden durch die Dateien ersetzt, auf die sie verweisen.
Es könnte einfacher sein, einfach tar zu verwenden, um die Daten in ein neues Verzeichnis zu kopieren.
-H (c and r mode only) Symbolic links named on the command line will be followed; the target of the link will be archived, not the link itself.
Sie könnten so etwas verwenden
tar -hcf - sourcedir | tar -xf - -C newdir
tar --help:
-H, --format=FORMAT        create archive of the given format
-h, --dereference          follow symlinks; archive and dump the files they point to
Für einige Definitionen von "einfach":
#!/bin/sh
set -e
for link; do
    test -h "$link" || continue
    dir=$(dirname "$link")
    reltarget=$(readlink "$link")
    case $reltarget in
        /*) abstarget=$reltarget;;
        *)  abstarget=$dir/$reltarget;;
    esac
    rm -fv "$link"
    cp -afv "$abstarget" "$link" || {
        # on failure, restore the symlink
        rm -rfv "$link"
        ln -sfv "$reltarget" "$link"
    }
done
 Führen Sie dieses Skript mit Linknamen als Argumente aus, z. bis find . -type l -exec /path/tos/script {} +