Wie kopiere ich symbolische Links mit dem relativen Pfad unter Unix?

1051
rrlamichhane

Ich habe diesen Ordner /full/path/sourceFoldermit den folgenden Dateien:

full/path/sourceFolder/fileA /full/path/sourceFolder/copyA -> fileA /full/path/sourceFolder/copyB

Sie können sehen, dass der Symlink auf die Datei in demselben Ordner verweist und nicht den vollständigen Pfad verwendet, sondern den relativen Pfad für die Verknüpfung verwendet.

Jetzt brauche ich einen Kopierbefehl, der alle Dateien mit dem Namen copy * im Quellordner in einen Zielordner kopiert. Wenn ich die Datei copyA kopiere, sollte sie die Quelle des symbolischen Links kopieren, dh fileA, aber den Namen copyA beibehalten. Der Kopierbefehl sollte auch zum Kopieren der Datei copyB funktionieren.

Kann das gemacht werden?

Ich habe diese Befehle ausprobiert, aber es funktioniert nicht, hauptsächlich weil mein Bezug relativ ist:

cp -rf --preserve=links /full/path/sourceFolder/copy* /target/path/ cp -RP /full/path/sourceFolder/copy* /target/path/ cp -Hrf /full/path/sourceFolder/copy* /target/path/ cp -Lrf /full/path/sourceFolder/copy* /target/path/

Mir gehen die Ideen aus. Was ist der eleganteste Weg, um dies zu erreichen?

0
Kannst du dein Beispiel korrigieren? Manchmal fügen Sie "sourceFolder" hinzu, manchmal nicht. Und auch zeigen, welches Ergebnis du willst? `cp path1 / * path2 /` führt dazu, dass Symlinks in path1 in reguläre Dateien in path2 kopiert werden. Joe P vor 7 Jahren 0
Die Verwendung von 4 Leerzeichen am Anfang der Zeilen ist für Codierungsblöcke einfacher als die Verwendung vieler Zeichen. Joe P vor 7 Jahren 1
Dies scheint eine seltsame Sache zu sein. Ich würde erwarten, dass eine Kopie einen fehlerhaften Link erstellt, der dann gelöst wird, wenn das Ziel kopiert wird. Wenn Sie dieses Verhalten wünschen, verwenden Sie feste Links. AFH vor 7 Jahren 0
die Pfade repariert ... rrlamichhane vor 7 Jahren 0
Ich kann das Problem nicht erneut erstellen. Für mich funktioniert das schlichte `cp / full / path / sourceFolder / copy * / target / path /`, sofern ich etwas falsch verstanden habe. Die resultierenden Dateien sind reguläre Dateien mit den Namen `copyA` und` copyB`. Mein Testbed ist Ubuntu 16.04.2 LTS. Kamil Maciorowski vor 7 Jahren 0
@kamil Du hast mich dafür geschlagen. Scheint das standardmäßige `cp`-Verhalten zu sein xenoid vor 7 Jahren 0

0 Antworten auf die Frage