GNU/Linux >> Linux Esercitazione >  >> Linux

Sostituisci collegamenti simbolici con file

Se ho capito bene il -L bandiera del cp dovrebbe fare esattamente quello che vuoi.

Basta copiare tutti i collegamenti simbolici e li sostituirà con i file a cui puntano.


Potrebbe essere più semplice usare semplicemente tar per copiare i dati in una nuova directory.

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

Potresti usare qualcosa del genere

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

Per alcune definizioni di "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

Esegui questo script con i nomi dei collegamenti come argomenti, ad es. attraverso find . -type l -exec /path/tos/script {} +


Linux
  1. Eseguire il backup dei file con rsync

  2. Trova i file e tarali (con spazi)

  3. Comportamento di cd/bash sui collegamenti simbolici

  4. Utilizzo di find e tar con file con caratteri speciali nel nome

  5. Rimuovi tutti i collegamenti simbolici dei file in un comando

Sostituisci du con polvere su Linux

Come scaricare ed estrarre file Tar con un comando

Come creare collegamenti simbolici in Linux

Guida introduttiva al comando Tar

Come tarare i file con un ordine ordinato?

Molti file ._ all'interno di un file tar