Warum nach einem rsync-Ziel einen abschließenden Schrägstrich einfügen?


13

Laut dieser Webseite führt das Hinzufügen von '/' am Ende eines rsync-Ziels zu einem anderen Ergebnis als das Nicht-Hinzufügen.

Ich habe versucht, dies zu testen, kann es jedoch nicht verifizieren:

$ mkdir dir{1..3}
$ touch dir1/file
$ rsync -r dir1/ dir2
$ rsync -r dir1/ dir3/
$ ls dir*
dir1:
file

dir2:
file

dir3:
file

Hat das Anhängen eines '/' an das Ziel manchmal tatsächlich eine Verwendung?


Verweisen Sie auf diesen Teil der Manpage A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.:? Wenn ja, beachten Sie bitte, dass Ihr Befehl dem in dem Beispiel auf der Manpage gezeigten überhaupt nicht ähnlich ist.
— Jesse_b

@Jesse_b Ihr Kommentar überrascht mich ... "Wenn Sie" / "am Ende des Ziels verwenden, fügt rsync die Daten in den letzten Ordner ein. Wenn Sie" / "am Ende des Ziels nicht verwenden, erstellt rsync einen Ordner mit Geben Sie den Namen des letzten Zielordners ein und fügen Sie die Daten in diesen Ordner ein. "
— Hauke ​​Laging

@HaukeLaging Ich bin verwirrt, was ist überraschend? Dieser Abschnitt bezieht sich auch auf den abschließenden Schrägstrich in der Quelle. Also , wenn Sie haben rsync -r dir1/subdir1 dir2/es , den Inhalt kopieren wird subdir1in dir2aber wenn Sie tat rsync -r dir1/subdir1/ dir2/es das gesamte Verzeichnis (samt Inhalt) kopiert subdir1in dir2so dass Sie würde./dir2/subdir1/
— jesse_b

@ Jesse_b Ich habe den "Mann" in Ihrem ersten Kommentar nicht bemerkt. Offensichtlich bezieht sich das OP nicht auf die Manpage, sondern auf die Seite, die er verlinkt hat.
— Hauke ​​Laging

@HaukeLaging Oh duh, hab das nicht mal gesehen. Ich glaube, ich habe zu schnell überflogen und es als "Laut Manpage" gelesen.
— Jesse_b

Antworten:


28

Es macht einen Unterschied, wenn die Quelle eine Datei ist und das Zielverzeichnis nicht existiert. Nehmen Sie zum Beispiel eine Datei fileals Quelle:

  • $ rsync file dest/erstellt eine Kopie von filein einem Verzeichnis dest, wohingegen
  • $ rsync file desterstellt eine Kopie der fileaufgerufenen Dateidest

Hinzufügen (aus den Kommentaren); Wenn bereits ein Verzeichnis destvorhanden ist, filewird destin beiden oben genannten Fällen eine Kopie erstellt .

Einfaches Beispiel:

~/test > touch file
~/test > mkdir dest1
mkdir: created directory 'dest1'
~/test > tree
.
├── dest1
└── file

1 directory, 1 file
~/test > rsync file dest1
~/test > rsync file dest2
~/test > rsync file dest3/
~/test > tree
.
├── dest1
│   └── file
├── dest2
├── dest3
│   └── file
└── file

2 directories, 4 files
~/test >

1
Vielen Dank. Wenn also destbereits ein Verzeichnis vorhanden ist, ist der abschließende Schrägstrich nicht erforderlich?
— EmmaV

Genau. Wenn im obigen Beispiel ein Verzeichnis destvorhanden ist, filewird in beiden Fällen eine Kopie von erstellt.
— Resc
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.