Scp thông minh hơn nhân đôi một phần của đường dẫn cục bộ


2

Nhiều lần trong một ngày, tôi thấy mình muốn sao chép một hoặc hai tập tin từ ~/src/some/path/or/other~/src/some/different/path trên máy cục bộ của tôi, để /srv/www/some/path/or/other/srv/www/some/different/path tương ứng trên một máy chủ thử nghiệm. Hai đường dẫn giống hệt nhau sau ~ / src và / srv / www - mặc dù rõ ràng tôi thường bỏ qua tên tệp trên arg thứ hai để scp, mà tôi hiện đang sử dụng.

Vấn đề là, tôi khá thường xuyên sử dụng lệnh invp scp và sao chép tệp vào thư mục sai hoặc ghi đè lên một tệp khác vì tab hoàn toàn quản lý để vượt qua tôi. Tôi có thể đồng bộ hóa toàn bộ cây cục bộ của mình với máy chủ qua ssh, nhưng đôi khi tôi không muốn tải lên toàn bộ nội dung - chỉ là một tệp cụ thể.

Tôi đoán những gì tôi muốn là công cụ CLI đơn giản sẽ cho phép tôi làm (có thể với một chút cấu hình) tương đương với đạo đức của:

jkg5150@dev-laptop:~/src/myproject$ funkytool path/to/file another/path/another-file mydevhost.mycompany.com

...và có file sao chép vào mydevhost.mycompany.com:/srv/www/myproject/path/to/another-file sao chép vào mydevhost.mycompany.com:/srv/www/myproject/another/path/.

Chắc chắn có một mẹo tôi đang thiếu - hay tôi chỉ nên viết một mẹo?


Bạn có mò không bash (hoặc thậm chí sh )? Điều này trông giống như một kịch bản shell khá đơn giản.
Scott

Chắc chắn rồi; Tôi chỉ tự hỏi nếu có một công cụ hiện có trước khi tôi tự lăn.
James Green

Câu trả lời:


3

Sử dụng rsync với -R Tùy chọn. Từ rsync(1) trang nam:

   -R, --relative
          Use  relative  paths. This means that the full path names speci‐
          fied on the command line are sent to the server rather than just
          the  last  parts  of  the filenames. This is particularly useful
          when you want to send several different directories at the  same
          time. For example, if you used this command:

             rsync -av /foo/bar/baz.c remote:/tmp/

          ...  this would create a file named baz.c in /tmp/ on the remote
          machine. If instead you used

             rsync -avR /foo/bar/baz.c remote:/tmp/

          then a file named /tmp/foo/bar/baz.c would  be  created  on  the
          remote machine, preserving its full path.  These extra path ele‐
          ments are called "implied directories" (i.e. the "foo"  and  the
          "foo/bar" directories in the above example).

Đây dường như là chính xác những gì tôi đang tìm kiếm - cảm ơn!
James Green
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.