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?

EmmaV
quelle
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 >
resc
quelle
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