was ist der Zweck von cp-s?

was ist der Zweck von cp-s?

wie die Antwort auf diese Frage zeigt, Gibt es einen Unterschied zwischen dem Hardlinking mit cp -l oder ln?

Der Zweck der Option -l für den Befehl cp besteht darin, Verzeichnisse (deren Inhalt) rekursiv zu verlinken. Die Option -s ist das Gegenstück und erstellt Softlinks statt Hardlinks, aber es scheint, dass sie nicht rekursiv verwendet werden kann.

Jeder entsprechende Versuch führt zu der Fehlermeldung:

cp: `source_dir/source_file': can make relative symbolic links only in current directory

Vielleicht ist das von der Distribution abhängig. In Ubuntu 12.04 ist dies das Ergebnis. Nur wenn die Originaldatei und der Link im selben Verzeichnis liegen, funktioniert es.

Vielleicht ist die Syntax falsch? cp -rs target_directory destination_directoryDas habe ich verwendet.

Beispiel:

$ ls sourcedir/             
-rw-rw---- 1 user group 1123 Jan  8 23:10 source_file
$ cp -rs sourcedir/ targetdir/
cp: `targetdir/sourcedir/source_file': can make relative symbolic links only in current directory

Antwort1

Bei einem absoluten Pfad zum Quellverzeichnis:

cp -rs $PWD/sourcedir/ targetdir/

Die symbolischen Links in targetdirenthalten dann absolute Pfade zu sourcedir.

Andernfalls würde, wenn nur ein symbolischer Link erstellt würde, etwa Folgendes entstehen:

targetdir/filename -> sourcedir/filename

Dies ist jedoch nicht der richtige relative Pfad zum Suchen der Originaldatei. Er sollte lauten:

targetdir/filename -> ../sourcedir/filename

cpversucht nicht herauszufinden, in welcher Beziehung die Quell- und Zielverzeichnisse zueinander stehen, um die entsprechende Anzahl an ../Präfixen hinzufügen zu können.

verwandte Informationen