Shell Script để tải tệp lên cùng thư mục con trên máy chủ từ xa
Một tác vụ rất phổ biến đối với nhà phát triển web là tải lên một tệp từ thư mục con trên hộp phát triển của bạn đến cùng thư mục con trên máy chủ từ xa. Thật không may, điều này luôn luôn là một quá trình thủ công gây phiền nhiễu liên quan đến việc chuyển đổi thư mục trên cả hai máy chủ và lãng phí một lượng lớn thời gian.
Vì vậy, tôi đã tự mình viết một tập lệnh shell để tự động hóa việc này cho tôi, sử dụng scp để sao chép tập tin an toàn. (Lưu ý bên quan trọng: ftp không an toàn khủng khiếp, thay vào đó hãy sử dụng WinSCP)
Vấn đề chính cần giải quyết là cài đặt WordPress của tôi trên máy phát triển của tôi có một thư mục cơ sở khác với cài đặt trên máy chủ của tôi. Trên máy phát triển của tôi, nó là / var / www và trên máy chủ của tôi là một cái gì đó giống như / var / www / howtogeek / docs /. Tôi quyết định chỉ chuyển chúng thành các biến ở đầu tập lệnh, như thế này:
[email protected]
RDIR = / var / www / howtogeek / docs
LDIR = "\ / var \ / www"
Lưu ý rằng thư mục cục bộ (LDIR) trong tập lệnh có \ trước mỗi / trong đường dẫn. Điều này là do chúng ta sẽ chuyển điều này thành một lệnh sed sau này trong tập lệnh, vì vậy chúng ta phải thoát khỏi các giá trị đó. Tôi chắc chắn có một số cách khác xung quanh điều này, nhưng tôi không biết về nó.
Tiếp theo, tôi thiết lập đăng nhập ssh tự động. Để làm điều này, trước tiên bạn cần chạy tiện ích ssh keygen như vậy:
ssh-keygen -t rsa
Sau đó, bạn cần sao chép tệp ~ / .ssh / id_rsa.pub sang tệp ~ / .ssh / ủy quyền trên máy chủ từ xa. Nếu thư mục ~ / .ssh đã được tạo trên máy chủ từ xa (có thể muốn kiểm tra), thì bạn có thể chạy lệnh này để sao chép các phím trên:
mèo ~ / .ssh / id_rsa.pub | người dùng ssh @ tên máy chủ 'mèo >> .ssh / ủy quyền_keys'
Bây giờ chúng tôi đã có thông tin đăng nhập ssh tự động, sẽ cho phép sử dụng tiện ích scp mà không cần mật khẩu. Bây giờ chúng ta hãy xem lệnh scp chúng ta sẽ sử dụng trong tập lệnh:
scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed Biệt s / $ LDIR // thời '/' echo $ 1 | sed 's /.*\/// "
$ 1 là tham số bạn sẽ chuyển đến tập lệnh cho tên tệp bạn đang cố tải lên. $ SSHSERVER và $ RDIR là các biến chúng tôi sẽ đặt ở đầu tập lệnh để đặt tên người dùng @ tên máy chủ và đường dẫn từ xa trước đó.
Khối đầu tiên bắt đầu với pwd | sed lấy đường dẫn thư mục hiện tại và loại bỏ phần trước của đường dẫn không khớp với máy chủ từ xa, nhưng để lại phần còn lại của đường dẫn. Chẳng hạn, nếu bạn ở trong / var / www / wp-content / khi bạn chạy lệnh, khối sed sẽ loại bỏ / var / www dựa trên biến LDIR của chúng tôi, nhưng để lại / wp-content / một phần của nó.
Khối thứ hai chỉ đảm bảo loại bỏ toàn bộ đường dẫn trước khỏi tên tệp được truyền cho tập lệnh để bạn có được tên tệp.
Ví dụ: nếu bạn đặt tên tập lệnh up.sh và chạy nó từ thư mục local / var / www / wp-content / plugins / của bạn trên một tệp:
up.sh myplugin.php
Điều này đã được mở rộng bởi vỏ như sau:
scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Thay vì cố gắng tạo tệp tập lệnh của riêng bạn dựa trên bài viết, tôi đã cung cấp cho bạn tải xuống. Bằng cách đó, sẽ không có bất kỳ vấn đề nào với các ký tự đặc biệt không hoạt động và vâng, tôi đã sử dụng tập lệnh để tự tải lên =)
Tải xuống geek-uploader.sh
Chỉ cần đặt nó ở đâu đó trên đường dẫn của bạn và đặt tên cho nó bất cứ điều gì bạn muốn. Tôi đã đổi tên của tôi thành chỉ là up lên Up, vì vậy tôi chỉ có thể gõ vào tên của tập tin này để tải lên. Cũng nhớ mở nó lên và thay đổi các biến ở đầu tập lệnh để phù hợp với môi trường của bạn.
Tập lệnh này sẽ hoạt động trên mọi thứ có vỏ * nix và tiện ích scp. Tôi đang sử dụng Ubuntu, nhưng nó sẽ hoạt động trên Solaris, OS X hoặc thậm chí Windows có cài đặt Cygwin.