Mengapa menambahkan garis miring setelah tujuan rsync?

13

Menurut halaman web ini , menambahkan '/' ke akhir tujuan rsync menghasilkan hasil yang berbeda dari tidak menambahkannya.

Saya sudah mencoba menguji ini, tetapi saya tidak dapat memverifikasinya:

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

dir2:
file

dir3:
file

Apakah menambahkan tanda '/' ke tujuan terkadang memiliki kegunaan?

EmmaV
sumber
Apakah Anda mengacu ini bagian dari halaman manual: A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.? Jika demikian, harap perhatikan bahwa perintah Anda sama sekali tidak mirip dengan yang ada dalam contoh yang diberikan di halaman manual.
jesse_b
@Jesse_b Komentar Anda tidak mengejutkan saya ... "Saat menggunakan" / "di akhir tujuan, rsync akan menempelkan data di dalam folder terakhir. Ketika tidak menggunakan" / "di akhir tujuan, rsync akan membuat folder dengan nama folder tujuan terakhir dan tempel data di dalam folder itu. "
Hauke ​​Laging
@ HaukeLaging Saya bingung, apa yang mengejutkan? Bagian khusus ini juga merujuk pada garis miring yang ada pada sumbernya. Jadi jika Anda melakukannya rsync -r dir1/subdir1 dir2/akan menyalin isi subdir1ke dalam dir2tetapi jika Anda melakukannya rsync -r dir1/subdir1/ dir2/akan menyalin seluruh direktori (termasuk konten) subdir1ke dalam dir2sehingga Anda akan memiliki./dir2/subdir1/
jesse_b
@ Jesse_b Saya tidak melihat "pria" di komentar pertama Anda. Jelas sekali OP tidak merujuk ke halaman manual tetapi ke halaman yang telah dia tautkan.
Hauke ​​Laging
@ HaukeLaging Oh, ya, bahkan tidak melihat itu. Saya pikir saya membaca terlalu cepat dan membacanya sebagai "Menurut halaman manual".
jesse_b

Jawaban:

28

Itu membuat perbedaan ketika sumbernya adalah file dan direktori tujuan tidak ada. Sebagai contoh, ambil file yang disebut filesebagai sumber:

  • $ rsync file dest/akan membuat salinan filedi dalam direktori dest, sedangkan
  • $ rsync file destakan membuat salinan dari file yang filedipanggildest

Untuk menambah (dari komentar); jika direktori destsudah ada, salinan fileakan dibuat destdalam kedua kasus di atas.

Contoh dasar:

~/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 >
penyelamat
sumber
1
Terima kasih. Jadi jika direktori destsudah ada, tidak perlu untuk trailing slash?
EmmaV
Persis. Jika dalam contoh di atas destada direktori , salinan fileakan dibuat di dalam dalam kedua kasus.
resc