
Ich verwende den folgenden Befehl, um eine vollständige, rekursive Kopie des Inhalts eines Verzeichnisses in ein anderes zu erstellen:
rsync -avzhe /path1/to1/dir1/* /path2/to2/dir2/
Es funktioniert wie erwartet, außer dass die erste Datei (in alphabetischer Reihenfolge), sei es ein Verzeichnis oder eine Datei, nicht kopiert wird. Alle anderen Dateien werden kopiert. Warum?
Mein Betriebssystem ist MacOS 10.14.6, falls das wichtig ist.
Antwort1
Die -e
Option benötigt ein Argument, daher wird dafür der erste Dateiname verwendet. Ich bin nicht sicher, warum Sie das möchten, -e
da dadurch der Befehl festgelegt wird, der zum Herstellen einer Verbindung mit der Fernbedienung verwendet werden soll, Sie jedoch keine Fernbedienung verwenden. Entfernen Sie einfach das -e
.
Antwort2
Um eine vollständige Kopie des Verzeichnisses /path1/to1/dir1
mit dem Namen zu erstellen /path2/to2/dir2
, verwenden Sie
rsync -av /path2/to1/dir1/ /path2/to2/dir2
Es macht keinen Sinn, Komprimierung ( -z
) für eine lokale Kopie zu verwenden. Die -e
Option gibt den Befehl an, der zum Herstellen der Netzwerkverbindung verwendet wird (weshalb Ihr Befehl beim Kopieren der ersten Datei fehlschlägt; rsync
verwendet es als Optionsargument für die -e
Option), daher sollte dies in diesem Szenario ebenfalls entfernt werden.
Verwenden Sie es außerdem nicht *
am Ende des Quellpfads, da dies normalerweise nicht mit versteckten Namen übereinstimmen würde. Das Zusammenfassen aller Namen darunter dir1
könnte möglicherweise auch zu einer Liste führen, die zu lang ist, als dass der Befehl überhaupt ausgeführt werden könnte.
Stellen Sie einfach sicher, dass der Quellpfad mit einem Schrägstrich endet. Ein Schrägstrich am Ende des Zielpfads macht keinen Unterschied. Das Entfernen des Schrägstrichs aus dem Quellpfad würde hineinkopieren dir1
. dir2
Ein Schrägstrich am Ende des Quellpfads erstellt dir2
eine Kopie von dir1
.
Darüber hinaus möchten Sie möglicherweise -H
sicherstellen, dass Hardlinks am Ziel ordnungsgemäß hergestellt werden, und --sparse
wenn Sie wissen, dass Sie Dateien kopieren, die möglicherweise spärlich sind (z. B. vorab zugewiesene Disk-Images).
Verwenden Sie --delete
es auchlöschenEinträge vom Ziel, die nicht Teil der Quelldateihierarchie sind. Verwenden Sie dies mit Vorsicht. Möglicherweise möchten Sie zuerst einen Testlauf mit -n
( --dry-run
) durchführen.