Skrip Shell untuk Memuat naik Fail ke Subdirektori Sama pada Server Jauh
Tugas yang sangat umum bagi pemaju web adalah memuat naik satu fail dari subdirektori pada kotak pembangunan anda ke subdirektori yang sama pada pelayan jauh. Malangnya, ini selalu menjadi proses manual yang menjengkelkan yang melibatkan pertukaran direktori pada kedua-dua pelayan dan membuang masa yang besar.
Jadi, saya telah mengambilnya untuk menulis skrip shell untuk mengautomasikan ini untuk saya, menggunakan scp untuk menyalin fail selamat. (Catatan Nota Penting: ftp adalah sangat tidak selamat, gunakan WinSCP sebaliknya)
Masalah utama untuk diselesaikan adalah pemasangan WordPress saya pada mesin pembangunan saya mempunyai direktori asas berbeza daripada pemasangan pada pelayan saya. Pada mesin pembangunan saya itu / var / www, dan pada pelayan saya adalah sesuatu yang lebih seperti / var / www / howtogeek / docs /. Saya memutuskan untuk hanya memindahkan mereka ke pembolehubah pada permulaan skrip, seperti ini:
[email protected]
RDIR = / var / www / howtogeek / docs
LDIR = "\ / var \ / www"
Perhatikan bahawa direktori setempat (LDIR) dalam skrip mempunyai \ sebelum setiap / dalam laluan. Ini kerana kita akan lulus ini ke dalam perintah sed kemudian di skrip, jadi kita harus melepaskan nilai tersebut. Saya pasti ada cara lain di sekitar ini, tetapi saya tidak menyedarinya.
Seterusnya, saya menyediakan log masuk ssh automatik. Untuk melakukan ini, anda perlu terlebih dahulu menjalankan utiliti ssh keygen seperti:
ssh-keygen -t rsa
Kemudian anda perlu menyalin fail ~ / .ssh / id_rsa.pub ke fail ~ / .ssh / authorized_keys pada pelayan jauh. Sekiranya direktori ~ / .ssh sudah dibuat pada pelayan jauh (mungkin mahu memeriksa), maka anda boleh menjalankan perintah ini untuk menyalin kunci ke atas:
kucing ~ / .ssh / id_rsa.pub | ssh user @ hostname 'cat >> .ssh / authorized_keys'
Kini kami mendapat log masuk ssh automatik, yang akan membolehkan menggunakan utiliti scp tanpa kata laluan. Sekarang mari kita lihat perintah scp yang akan kita gunakan dalam skrip:
scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed "s / $ LDIR //" '/' echo $ 1 | sed's /.*\/// "
$ 1 adalah parameter yang anda akan lulus ke skrip untuk nama fail yang anda cuba muat naik. $ SSHSERVER dan $ RDIR adalah pembolehubah yang akan kami tetapkan pada permulaan skrip untuk menetapkan nama @ hostname dan laluan jauh terdahulu.
Blok pertama yang bermula dengan pwd | mengambil laluan direktori semasa dan jalur dari bahagian sebelumnya jalan yang tidak sepadan dengan pelayan jauh, tetapi meninggalkan seluruh jalan. Sebagai contoh, jika anda berada di / var / www / wp-content / apabila anda menjalankan arahan, blok sed akan menghapuskan / var / www berdasarkan pembolehubah LDIR kami, tetapi meninggalkan / wp-content /.
Blok kedua hanya memastikan untuk melepaskan keseluruhan laluan sebelumnya dari nama fail yang diluluskan ke skrip supaya anda hanya mendapat nama fail.
Sebagai contoh, jika anda menamakan skrip up.sh dan lari dari direktori / var / www / wp-content / plugins / tempatan anda pada fail:
up.sh myplugin.php
Ini akan dikembangkan oleh shell sebagai berikut:
scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Daripada mencuba membuat fail skrip anda sendiri berdasarkan artikel, saya telah menyediakannya untuk anda memuat turun. Dengan cara itu tidak akan ada masalah dengan aksara khas yang tidak berfungsi ... dan ya, saya menggunakan skrip untuk memuat naik sendiri =)
Muat turun geek-uploader.sh
Cukup letakkan di suatu tempat di jalan anda, dan namakannya apa sahaja yang anda mahukan. Saya menamakan semula saya sebagai "naik", jadi saya hanya boleh menaip "filename.txt" untuk dimuat naik. Juga ingat untuk membukanya dan mengubah pembolehubah pada permulaan skrip agar sesuai dengan persekitaran anda.
Skrip ini harus berfungsi dengan apa-apa dengan * shell nix dan utiliti scp. Saya menggunakan Ubuntu, tetapi ia harus berfungsi pada Solaris, OS X, atau Windows dengan Cygwin dipasang.