staging.inyokaproject.org

cp --preserve=links mag nicht

Status: Gelöst | Ubuntu-Version: Kubuntu 24.04 (Noble Numbat)
Antworten |

michahe

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 874

Hallo, ich möchte Dateien auf ein anderes Laufwerk kopieren und die in der Quelle enthaltenen SymLinks erhalten; die Quelle hat:

1
2
3
$ '/mnt/Daten
$ ls -l
2024.pdf -> /mnt/Daten/Biblio/2024.pdf

Mein Befehl:

1
$ cp --archive --preserve=links --recursive --verbose '/mnt/Daten/.' '/media/ZielPC'     # Das mount-Ziel ist ZielPC/mnt/Daten

Ergebnis:

1
Die symbolische verknüpfung kann nicht angelegt werde; die Operation wird nicht unterstützt.

Was mache ich falsch?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

Welchen Typ hat jeweils das Dateisystem für Quelle und Ziel?

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 874

Danke, kB 9483351:

Dateisystem für Quelle und Ziel?

beide ext4.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Nicht, dass das unbedingt die Fehlerquelle ist, aber da sind zu viele redundante Optionen. Eigentlich brauchst Du nur

1
cp --archive --verbose '/mnt/Daten/' '/media/ZielPC/'

Halt doch: Ich gehe davon aus, dass "--preserve=links" das "--preserve=all" überschreibt, das von "--archive" gesetzt worden ist. Das dürfte die schuldige Option sein.

Ich würde das vermutlich mit rsync -a machen, aber cp -a sollte auch tun. Vermutlich willst Du auch löschen, dann rsnc -a --delete quelle ziel.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 874

Danke rklm,

aber das Problem bleibt bestehen:

1
$ cp --archive --recursive --verbose '/mnt/Daten/.' '/media/ZielPC'     # Das mount-Ziel ist ZielPC/mnt/Daten

Ergebnis:

1
Die symbolische verknüpfung kann nicht angelegt werde; die Operation wird nicht unterstützt.

Was mache ich falsch bzw. wie kann ich die Aufgabe lösen?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

Um welche symbolische Verknüpfung handelt es sich denn und was ist deren Ziel?

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 874

Danke kB schrieb:

Um welche symbolische Verknüpfung handelt es sich denn und was ist deren Ziel?

Was meinst Du? Die Quelle hat:

1
2
3
$ cd '/mnt/Daten'
$ ls -l
2024.pdf -> /mnt/Daten/Biblio/2024.pdf

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

michahe schrieb:

Hallo, ich möchte Dateien auf ein anderes Laufwerk kopieren und die in der Quelle enthaltenen SymLinks erhalten; die Quelle hat:

1
2
3
$ '/mnt/Daten
$ ls -l
2024.pdf -> /mnt/Daten/Biblio/2024.pdf

Hier beginnt meine Konfusion.

Der Satzanfang "die Quelle hat …" droht Schwammiges an, aber ich dachte ich könne es aus dem Kontext deduzieren.

Es folgt ein Apostroph im Codeblock, dem ich keine Funktion zuordnen kann. Es könnte, freilich und theoretisch, ein Verzeichnisname sein, aber nichts im Folgenden unterstützt diese Interpretation. Es könnte ein Tippfehler sein oder ein privates, geheimes Ad-hoc-Markdown. Ignorieren wir es vielleicht für's Erste?

Das ls -l soll uns zeigen, wie der Link aussieht und worauf er linkt; die folgende Zeile hat keinen $-Prompt und ist wohl die Reaktion darauf oder ein wesentlicher Ausschnitt davon.

2024.pdf im Quellverzeichnis linkt auf 2024.pdf im lokalen Ordner Biblio.

Jetzt die große Frage:

Soll beim Kopieren 2024.pdf als relativer Link in dessen Biblioordner linken, oder soll der Link nach /mnt/Daten/Biblio/2024.pdf weisen?

Das Ziel, /media/ZielPC, könnte ein via Netzwerk eingebundenes Laufwerk sein, aber auf dem ZielPC ist ja nicht eindeutig bestimmbar, ob da unser /mnt/daten/Biblio überhaupt sichtbar ist, und wenn, unter welchem Namen, und es kann sogar mehrfach dort eingebunden sein, aber welchen der möglichen Pfade soll das System dann wählen?

Das Ziel könnte auch ein mobiler Datenträger sein, der als /media/ZielPC eingebunden ist. Da das Filesystem ext4 sein soll wohl eher kein USB-Stick. Wird dieser Datenträger an einem anderen Rechner eingehängt, dann wäre es Zufall, wenn dort /mnt/daten/Biblio der Quellrechner und dessen Verzeichnis wäre.

Nebenfrage:

1
2
3
# Kommentar vorgezogen: 
# Das mount-Ziel ist ZielPC/mnt/Daten
cp --archive --recursive --verbose '/mnt/Daten/.' '/media/ZielPC'

Welchen Zweck erfüllen die Apostrophe und wozu /mnt/Daten/. statt /mnt/Daten?

Der Kommentar ist m.E. falsch.

Das Ziel ist /media/ZielPC und darin wird der Inhalt von /mnt/Daten landen, aber ohne die Überverzeichnisse /mnt/Daten - dazu müsstest Du diese vorher anlegen, und mit

1
cp --archive --recursive --verbose '/mnt/Daten/.' '/media/ZielPC/mnt/Daten'

kopieren, bzw.

1
cp --archive --recursive --verbose /mnt/Daten /media/ZielPC/mnt/Daten

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

michahe schrieb:

[…]

1
2
3
$ cd '/mnt/Daten'
$ ls -l
2024.pdf -> /mnt/Daten/Biblio/2024.pdf

Eine Vermutung: Da der Link auf eine tiefere Ebene verweist, wird der Link früher kopiert als sein Ziel. Damit zeigt die Kopie des Links auf etwas nicht existentes. Das ist nicht verboten, mag aber trotzdem eine Rolle spielen.

CarstenHa

Avatar von CarstenHa

Anmeldungsdatum:
1. Mai 2020

Beiträge: 154

Hallo in die Runde,

--preserve=links ist laut Manpage 'cp' für Hardlinks und die werden bei Kopiervorgängen über Dateisystemgrenzen nicht berücksichtigt (bzw. sind nicht möglich). Siehe: ln (Abschnitt „Hardlinks“)

Gruß

Carsten

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 874

Danke user_unknown,

es handelt sich um zwei SSD von PCs, der entfernte PCalt wird via fstab und mount-Befehl eingebunden. Alle Datei(en) im Verzeichnis (deshalb /.) sollen von PCneu nach PCalt kopiert werden. PCneu hat in diesem Verzeichnis 11 Dateien, 10 werden kopiert, der Link nicht. PCneu und PCalt haben beide ein Verzeichnis /mnt/Daten. Am PCneu verweist /media/PCalt auf /mnt/Daten von PCalt.

Es folgt ein Apostroph im Codeblock, dem ich keine Funktion zuordnen kann.

Der fehlende Apostroph war ein Tippfehler, ich habe ihn jetzt hier berichtigt:

1
2
3
4
$ cd '/mnt/Daten'          # cd-Befehl und Apostroph hinzugefügt! Das Kommando wird am PCneu ausgeführt.
$ ls -l
2024.pdf -> /mnt/Daten/Biblio/2024.pdf
...   # 10 andere Dateien

Die Apostroph-Zeichen habe ich eingefügt, weil es fallweise Verzeichnis- oder Dateiname mit Leerzeichen gibt.

Das ls -l soll uns zeigen, wie der Link aussieht und worauf er linkt; die folgende Zeile hat keinen $-Prompt und ist wohl die Reaktion darauf ...

Exakt!

cp --archive --recursive --verbose '/mnt/Daten/.' '/media/PCalt/Test'

kopiert zehn Dateien richtig in das am PCalt existierende Verzeichnis /mnt/Daten/Test, nur dem Link nicht.

CarstenHa

Avatar von CarstenHa

Anmeldungsdatum:
1. Mai 2020

Beiträge: 154

Suchst du vielleicht diese Option von cp?
-P oder --no-dereference

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 874

Danke CarstenHa

Suchst du vielleicht diese Option von cp?
-P oder --no-dereference

Leider gleiches Ergebnis "Operation nicht unterstützt"

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 874

Danke kB

Eine Vermutung: Da der Link auf eine tiefere Ebene verweist, wird der Link früher kopiert als sein Ziel. Damit zeigt die Kopie des Links auf etwas nicht existentes. Das ist nicht verboten, mag aber trotzdem eine Rolle spielen.

Wie würde mein cp-Befehl "übersetzt" nach rsync ausschauen?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

kB schrieb:

michahe schrieb:

[…]

1
2
3
$ cd '/mnt/Daten'
$ ls -l
2024.pdf -> /mnt/Daten/Biblio/2024.pdf

Eine Vermutung: Da der Link auf eine tiefere Ebene verweist, wird der Link früher kopiert als sein Ziel. Damit zeigt die Kopie des Links auf etwas nicht existentes. Das ist nicht verboten, mag aber trotzdem eine Rolle spielen.

Welche Rolle sollte das spielen?

Wenn erst der Link, dann die Datei kopiert wird, sollte der Link als verwaister Link kopiert werden, aber wenn dann die Datei nachzügelt wäre er wieder geheilt.

Das kann es nicht sein.

Antworten |