Beranda » bagaimana » Shell Script untuk Mengunggah File ke Subdirektori yang Sama di Remote Server

    Shell Script untuk Mengunggah File ke Subdirektori yang Sama di Remote Server

    Tugas yang sangat umum bagi pengembang web adalah mengunggah satu file dari subdirektori pada kotak pengembangan Anda ke subdirektori yang sama pada server jarak jauh. Sayangnya, ini selalu berakhir dengan proses manual yang mengganggu yang melibatkan berpindah direktori pada kedua server, dan menghabiskan banyak waktu.

    Jadi, saya mengambil sendiri untuk menulis skrip shell untuk mengotomatisasi ini untuk saya, menggunakan scp untuk menyalin file aman. (Catatan Sisi Penting: ftp sangat tidak aman, gunakan WinSCP sebagai gantinya)

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

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

    Perhatikan bahwa direktori lokal (LDIR) dalam skrip memiliki \ sebelum setiap / di path. Ini karena kita akan meneruskan ini ke perintah sed nanti dalam skrip, jadi kita harus melarikan diri dari nilai-nilai itu. Saya yakin ada cara lain dalam hal ini, tetapi saya tidak menyadarinya.

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

    ssh-keygen -t rsa

    Maka Anda perlu menyalin file ~ / .ssh / id_rsa.pub ke file ~ / .ssh / official_keys di server jarak jauh. Jika direktori ~ / .ssh sudah dibuat di server jarak jauh (mungkin ingin memeriksa), maka Anda dapat menjalankan perintah ini untuk menyalin kunci:

    cat ~ / .ssh / id_rsa.pub | ssh user @ hostname 'cat >> .ssh / official_keys'

    Sekarang kita punya login ssh otomatis, yang akan memungkinkan menggunakan utilitas scp tanpa kata sandi. 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 berikan ke skrip untuk nama file yang Anda coba unggah. $ SSHSERVER dan $ RDIR adalah variabel yang akan kita atur di awal skrip untuk mengatur user @ hostname dan path jauh sebelumnya.

    Blok pertama yang dimulai dengan pwd | sed mengambil jalur direktori saat ini dan menghapus bagian sebelumnya dari jalur yang tidak cocok dengan server jarak jauh, tetapi meninggalkan sisa jalur. Misalnya, jika Anda berada di / var / www / wp-content / ketika Anda menjalankan perintah, blok sed akan menghapus / var / www berdasarkan variabel LDIR kami, tetapi biarkan bagian / wp-content / bagian darinya.

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

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

    up.sh myplugin.php

    Ini akan diperluas oleh shell sebagai berikut:

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

    Alih-alih mencoba membuat file skrip Anda sendiri berdasarkan artikel, saya telah menyediakannya untuk Anda unduh. Dengan begitu tidak akan ada masalah dengan karakter khusus yang tidak berfungsi ... dan ya, saya menggunakan skrip untuk mengunggah dirinya sendiri =)

    Unduh geek-uploader.sh

    Letakkan saja di suatu tempat di jalur Anda, dan beri nama apa pun yang Anda inginkan. Saya mengganti nama saya menjadi hanya "naik", jadi saya bisa mengetik "up filename.txt" untuk mengunggah. Ingat juga untuk membukanya dan ubah variabel di awal skrip agar sesuai dengan lingkungan Anda.

    Skrip ini harus bekerja pada apa pun dengan * nix shell dan utilitas scp. Saya menggunakan Ubuntu, tetapi harus berfungsi pada Solaris, OS X, atau bahkan Windows dengan Cygwin diinstal.