Shell Script để tải tệp lên cùng thư mục con trên máy chủ từ xa

Shell Script để tải tệp lên cùng thư mục con trên máy chủ từ xa
Shell Script để tải tệp lên cùng thư mục con trên máy chủ từ xa

Video: Shell Script để tải tệp lên cùng thư mục con trên máy chủ từ xa

Video: Shell Script để tải tệp lên cùng thư mục con trên máy chủ từ xa
Video: How To Fix Windows Hibernate - Stop Wake Up By Itself - Windows 7 8 8.1 10 - YouTube 2024, Tháng tư
Anonim

Một nhiệm vụ rất phổ biến cho một nhà phát triển web đang tải lên một tệp duy nhất từ một thư mục con trên hộp phát triển của bạn đến cùng một thư mục con trên máy chủ từ xa. Thật không may, điều này luôn luôn kết thúc 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 kịch bản lệnh shell để tự động hóa nó cho tôi, sử dụng scp để sao chép tập tin an toàn. (Lưu ý quan trọng: ftp cực kỳ không an toàn, sử dụng WinSCP thay thế)

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 thư mục cài đặt trên máy chủ của tôi. Trên máy phát triển của tôi 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ỉ di chuyển chúng vào các biến ở đầu kịch bản, như sau:

[email protected] RDIR=/var/www/howtogeek/docs LDIR=’/var/www’

Lưu ý rằng thư mục cục bộ (LDIR) trong kịch bản có trước mỗi / trong đường dẫn. Điều này là bởi vì chúng ta sẽ chuyển nó thành lệnh sed sau này trong kịch bản, vì vậy chúng ta phải thoát khỏi những 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ư sau:

ssh-keygen -t rsa

Sau đó, bạn cần phải sao chép tập tin ~ /.ssh / id_rsa.pub vào tập tin ~ /.ssh / authorized_keys 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 khóa trên:

cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat >>.ssh/authorized_keys’

Giờ đây, chúng tôi đã có các đă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 mà chúng ta sẽ sử dụng trong kịch bản lệnh:

scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*///’`

$ 1 là thông số bạn sẽ chuyển đến tập lệnh cho tên tệp bạn đang cố gắng tải lên. $ SSHSERVER và $ RDIR là các biến mà 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 bằng 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 để phần còn lại của đường dẫn. Ví dụ, nếu bạn đang ở 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 ta, nhưng để lại / wp-content / part 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 chỉ nhận được tên tệp.

Ví dụ, nếu bạn đặt tên cho 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 sẽ đượ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 đó trong con đường của bạn, và đặt tên nó là bất cứ điều gì bạn muốn. Tôi đổi tên của tôi thành "up", vì vậy tôi có thể chỉ cần gõ "up filename.txt" để tải lên. Cũng nên nhớ mở nó và thay đổi các biến ở đầu kịch bản để phù hợp với môi trường của bạn.

Kịch bản này sẽ làm việc trên bất cứ thứ gì với một shell * 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 với Cygwin được cài đặt.

Đề xuất: