Ziel ist es, symbolische Links durch die tatsächlichen Dateien zu ersetzen. Wann ist das notwendig? Wenn man symbolische Links loswerden möchte, indem man sie durch die ursprünglichen Dateien ersetzt, auf die sie verweisen. Dies kann nötig sein, wenn wir unsere Dateien auf ein anderes Medium oder an einen anderen Ort verschieben.
Befehl, der dies tut:
find . -type l -exec cp --remove-destination $(readlink -f {}) {} \;Aufschlüsselung:
-
find . -type l:- Findet alle symbolischen Links (
-type l) im aktuellen Verzeichnis (.) und seinen Unterverzeichnissen.
- Findet alle symbolischen Links (
-
-exec ... \;:- Führt den angegebenen Befehl (
cp --remove-destination $(readlink -f {}) {}) für jedes gefundene Element aus.
- Führt den angegebenen Befehl (
-
readlink -f {}:- Gibt den absoluten Pfad zur Datei zurück, auf die der symbolische Link
{}verweist.
- Gibt den absoluten Pfad zur Datei zurück, auf die der symbolische Link
-
cp --remove-destination $(readlink -f {}) {}:- Kopiert die tatsächliche Datei, auf die der symbolische Link verweist (
$(readlink -f {})), zurück an die Stelle, an der sich der symbolische Link befindet ({}). - Die Option
--remove-destinationentfernt die Ziel-Datei vor dem Kopieren. Dies ist wichtig, um den symbolischen Link durch die tatsächliche Datei zu ersetzen (ansonsten kanncpnicht über den Link schreiben).
- Kopiert die tatsächliche Datei, auf die der symbolische Link verweist (
Was passiert am Ende:
- Symbolische Links werden durch ihre Ziel-Dateien ersetzt.
- Dies ist nützlich, wenn Sie symbolische Links loswerden möchten, indem Sie sie durch den Inhalt der Dateien ersetzen, auf die sie verweisen.
Beispiel:
-
Angenommen, Sie haben die Struktur:
./file.txt ./link -> file.txtNach Ausführung des Befehls:
find . -type l -exec cp --remove-destination $(readlink -f {}) {} \;wird die Struktur:
./file.txt ./link (das ist jetzt keine Verknüpfung mehr, sondern eine Kopie von file.txt)