Tại sao thêm dấu gạch chéo sau đích rsync?


13

Theo này trang web, thêm '/' vào cuối một điểm đến rsync tạo ra một kết quả khác nhau từ không thêm nó.

Tôi đã thử kiểm tra cái này, nhưng tôi không thể xác minh nó:

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

dir2:
file

dir3:
file

Đôi khi việc thêm '/' vào đích có thực sự được sử dụng không?


Bạn đang đề cập đến phần này của trang người đàn ông : A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.? Nếu vậy, xin lưu ý rằng lệnh của bạn hoàn toàn không giống với lệnh trong ví dụ được đưa ra trong trang man.
jesse_b

@Jesse_b Nhận xét của bạn làm tôi ngạc nhiên ... "Khi sử dụng" / "ở cuối đích, rsync sẽ dán dữ liệu vào thư mục cuối cùng. Khi không sử dụng" / "ở cuối đích, rsync sẽ tạo một thư mục với tên thư mục đích cuối cùng và dán dữ liệu vào trong thư mục đó. "
Hauke ​​Laging

@HaukeLaging Tôi bối rối, có gì đáng ngạc nhiên? Phần đặc biệt này cũng đề cập đến dấu gạch chéo trên nguồn. Vì vậy, nếu bạn đã làm rsync -r dir1/subdir1 dir2/nó sẽ sao chép nội dung subdir1vào dir2nhưng nếu bạn đã làm rsync -r dir1/subdir1/ dir2/nó sẽ sao chép toàn bộ thư mục (bao gồm cả nội dung) subdir1vào dir2để bạn sẽ có./dir2/subdir1/
jesse_b

@Jesse_b Tôi không nhận thấy "người đàn ông" trong bình luận đầu tiên của bạn. Rõ ràng là OP không đề cập đến trang man mà là trang mà anh ta đã liên kết.
Hauke ​​Laging

@HaukeLaging Oh duh, thậm chí không thấy điều đó. Tôi nghĩ rằng tôi đã lướt qua quá nhanh và đọc nó là "Theo trang đàn ông".
jesse_b

Câu trả lời:


28

Nó làm cho một sự khác biệt khi nguồn là một tập tin và thư mục đích không tồn tại. Chẳng hạn, lấy một tệp gọi filelà nguồn:

  • $ rsync file dest/sẽ tạo một bản sao filebên trong một thư mục dest, trong khi
  • $ rsync file destsẽ tạo một bản sao của tệp fileđược gọi làdest

Để thêm (từ các ý kiến); nếu một thư mục destđã tồn tại, một bản sao filesẽ được tạo desttrong cả hai trường hợp trên.

Ví dụ cơ bản:

~/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
Cảm ơn bạn. Vì vậy, nếu thư mục destđã tồn tại, không cần dấu gạch chéo?
EmmaV

Chính xác. Nếu trong ví dụ trên một thư mục desttồn tại, một bản sao của filesẽ được tạo bên trong trong cả hai trường hợp.
resc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.