Wie ersetze ich einen symbolischen Link durch eine Kopie einer Datei, auf die er verweist?

15

Wenn ein Symlink (einzeln, keine Stapelverarbeitung des Dateisystems erforderlich) vorhanden ist, welche Befehlszeile muss verwendet werden, um ihn durch eine Kopie der Datei zu ersetzen, mit der er verknüpft ist?

Ivan
quelle

Antworten:

16
cp --remove-destination "$(readlink <symlink>)" <symlink>
Ignacio Vazquez-Abrams
quelle
1
Fehler "-bash: Syntaxfehler in der Nähe des unerwarteten Tokens" newline ", wenn er in einer Debian-Umgebung ausgeführt wird.
Lin Song Yang
Wenn <symlink>es sich um einen Symlink zu einem relativen Pfad handelt, funktioniert dies nur, wenn sich der <symlink>im aktuellen Verzeichnis befindet. Möglicherweise möchten Sie verwenden readlink -f. Oder wenn Sie zsh:cp --remove-destination path/to/symlink(:A) path/to/symlink
Stéphane Chazelas
0

Du könntest es tun:

file=path/to/symlink
{ rm -f -- "$file" && cat > "$file"; } < "$file"

(das kopiert nur den Inhalt, nicht die Metadaten der Datei wie Berechtigungen und Eigentumsrechte).

Stéphane Chazelas
quelle