GNU/Linux >> Tutoriels Linux >  >> Linux

Remplacer les liens symboliques par des fichiers

Si j'ai bien compris le -L drapeau des cp La commande devrait faire exactement ce que vous voulez.

Copiez simplement tous les liens symboliques et il les remplacera par les fichiers vers lesquels ils pointent.


Il serait peut-être plus simple d'utiliser simplement tar pour copier les données dans un nouveau répertoire.

-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.

Vous pourriez utiliser quelque chose comme ça

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

Pour quelques définitions de "facile":

#!/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

Exécutez ce script avec des noms de liens comme arguments, par ex. à find . -type l -exec /path/tos/script {} +


Linux
  1. Remplacer la nouvelle ligne par Nul ?

  2. Linux - Mise à jour quotidienne de Tar.gz uniquement avec les fichiers modifiés ?

  3. N moyen facile de remplacer les fichiers en double par des liens physiques ?

  4. Sauvegardez vos fichiers avec rsync

  5. Trouvez des fichiers et tarez-les (avec des espaces)

Remplacer du par de la poussière sous Linux

Comment télécharger et extraire des fichiers tar avec une seule commande

Comment créer des liens symboliques sous Linux

Premiers pas avec la commande Tar

Comment copier des liens symboliques ?

Comment créer des liens symboliques vers tous les fichiers (classe de fichiers) d'un répertoire ?