29Jun

Shell Script untuk Upload File ke Subdirektori yang Sama pada Remote Server

click fraud protection

Tugas yang sangat umum untuk pengembang web adalah mengupload satu file dari subdirektori pada kotak pengembangan Anda ke subdirektori yang sama di server jauh. Sayangnya, ini selalu menjadi proses manual yang menyebalkan yang melibatkan direktori switching di kedua server, dan menghabiskan banyak waktu.

Jadi, saya telah mengambilnya untuk menulis skrip shell untuk mengotomatisasi ini bagi saya, menggunakan scp untuk penyalinan file yang aman.(Catatan Sisi Penting: ftp sangat tidak aman, gunakan WinSCP sebagai gantinya)

Masalah utama yang harus dipecahkan adalah bahwa pemasangan WordPress saya di mesin pengembangan saya memiliki basis direktori yang berbeda dari pada pemasangan di server saya. Pada mesin pengembangan saya, itu adalah /var/ www, dan di server saya ada sesuatu yang lebih mirip /var/www/howtogeek/docs/.Saya memutuskan untuk hanya memindahkan mereka ke variabel di awal skrip, seperti ini:

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

instagram viewer

Perhatikan bahwa direktori lokal( LDIR) dalam script memiliki \ sebelum masing-masing / di jalan. Ini karena kita akan melewati ini menjadi perintah sed kemudian dalam naskah, jadi kita harus melepaskan diri dari nilai tersebut. Aku yakin ada beberapa cara lain di sekitar ini, tapi aku tidak menyadarinya.

Selanjutnya, saya mengatur login ssh otomatis. Untuk melakukan ini, Anda harus terlebih dahulu menjalankan utilitas keygen ssh seperti:

ssh-keygen -t rsa

Kemudian Anda perlu menyalin berkas ~ /.ssh/ id_rsa.pub ke berkas ~ authorized_keys /.ssh/ di server jauh. Jika direktori ~ /. ssh sudah dibuat di server jauh( mungkin ingin diperiksa), Anda dapat menjalankan perintah ini untuk menyalin kunci di atas:

cat ~ /.ssh/ id_rsa.pub |ssh user @ hostname 'cat & gt; & gt;.ssh / authorized_keys '

Sekarang kita sudah mendapatkan login ssh otomatis, yang akan mengaktifkan utilitas scp tanpa password. 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 akan Anda sampaikan ke skrip untuk nama file yang ingin Anda unggah.$ SSHSERVER dan $ RDIR adalah variabel yang akan kami tetapkan di awal skrip untuk menyetel nama host pengguna @ dan jalur jauh sebelumnya.

Blok pertama yang dimulai dengan pwd | sed mengambil jalur direktori saat ini dan melepaskan bagian sebelumnya dari jalur yang tidak sesuai dengan server jauh, namun meninggalkan sisa jalur. Misalnya, jika Anda menggunakan /var/www/ wp-content / ketika Anda menjalankan perintah, blok sed akan menghapus www /var/ berdasarkan variabel LDIR kami, tapi tinggalkan / wp-content / bagiannya.

Blok kedua hanya memastikan untuk menghapus seluruh jalur sebelumnya dari nama file yang dilewatkan ke skrip sehingga Anda hanya mendapatkan nama file.

Misalnya, jika Anda menamai skrip up.sh dan menjalankannya dari direktori /var/www/ wp-content /plugins/ lokal Anda di file:

up.sh myplugin.php

Ini akan diperluas oleh shell sebagai berikut:

scpmyplugin.php [email protected]: /var/www/howtogeek/docs/ wp-content /plugins/ myplugin.php

Alih-alih mencoba membuat file skrip Anda sendiri berdasarkan artikel tersebut, saya sudah menyediakannya untuk Anda unduh. Dengan cara itu tidak akan ada masalah dengan karakter khusus yang tidak bekerja. .. dan ya, saya menggunakan skrip untuk mengupload dirinya sendiri =)

Download geek-uploader.sh

Taruh saja di suatu tempat di jalan Anda, dan sebutkan apa pun yang Anda inginkan. Saya mengganti namanya menjadi "naik", jadi saya bisa mengetikkan "up filename.txt" untuk diunggah. Ingat juga untuk membukanya dan mengubah variabel di awal skrip agar sesuai dengan lingkungan Anda.

Skrip ini harus bekerja pada apa saja dengan shell * nix dan utilitas scp. Saya menggunakan Ubuntu, tapi harus bekerja pada Solaris, OS X, atau bahkan Windows dengan Cygwin terpasang.