Homepage » come » Shell Script per caricare un file nella stessa sottodirectory su un server remoto

    Shell Script per caricare un file nella stessa sottodirectory su un server remoto

    Un compito molto comune per uno sviluppatore web è il caricamento di un singolo file da una sottodirectory nella casella di sviluppo nella stessa sottodirectory su un server remoto. Sfortunatamente, questo finisce sempre per essere un fastidioso processo manuale che coinvolge il cambio di directory su entrambi i server e spreca una grande quantità di tempo.

    Quindi, mi sono preso la responsabilità di scrivere uno script di shell per automatizzarlo per me, usando scp per la copia sicura dei file. (Nota importante: ftp è orribilmente insicuro, usa invece WinSCP)

    Il problema principale da risolvere era che la mia installazione WordPress sul mio computer di sviluppo ha una directory di base diversa dall'installazione sul mio server. Sulla mia macchina di sviluppo è / var / www, e sul mio server c'è qualcosa di più simile a / var / www / howtogeek / docs /. Ho deciso di spostarli in variabili all'inizio dello script, in questo modo:

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

    Si noti che la directory locale (LDIR) nello script ha un \ prima di ogni / nel percorso. Questo perché passeremo questo comando in un comando sed in seguito nella sceneggiatura, quindi dobbiamo sfuggire a questi valori. Sono sicuro che ci sia un altro modo per aggirare questo, ma non ne sono consapevole.

    Successivamente, ho impostato gli accessi ssh automatici. Per fare ciò, è necessario prima eseguire l'utilità keygen di ssh in questo modo:

    ssh-keygen -t rsa

    Quindi è necessario copiare il file ~ / .ssh / id_rsa.pub nel file ~ / .ssh / authorized_keys sul server remoto. Se la directory ~ / .ssh è già stata creata sul server remoto (potrebbe essere necessario controllare), è possibile eseguire questo comando per copiare le chiavi su:

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

    Ora abbiamo gli accessi ssh automatici, che abiliteranno l'utilizzo dell'utilità scp senza password. Ora diamo un'occhiata al comando scp che useremo nello script:

    scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed "s / $ LDIR //" '/' echo $ 1 | sed 's /.*\/// "

    $ 1 è il parametro che passerai allo script per il nome del file che stai tentando di caricare. $ SSHSERVER e $ RDIR sono variabili che imposteremo all'inizio dello script per impostare user @ hostname e il percorso remoto precedente.

    Il primo blocco che inizia con pwd | sed prende il percorso della directory corrente e rimuove la parte precedente del percorso che non corrisponde al server remoto, ma lascia il resto del percorso. Ad esempio, se eri in / var / www / wp-content / quando hai eseguito il comando, il blocco sed toglierebbe il / var / www in base alla nostra variabile LDIR, ma lascia il / wp-content / parte di esso.

    Il secondo blocco si limita a rimuovere l'intero percorso precedente dal nome del file passato allo script in modo da ottenere il nome del file.

    Ad esempio, se hai chiamato lo script up.sh e lo hai eseguito dalla tua directory / var / www / wp-content / plugins / locale su un file:

    up.sh myplugin.php

    Questo sarebbe stato espanso dalla shell come segue:

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

    Invece di provare a creare il tuo file di script in base all'articolo, l'ho fornito per il download. In questo modo non ci saranno problemi con caratteri speciali che non funzionano ... e sì, ho usato lo script per caricarlo =)

    Scarica geek-uploader.sh

    Mettilo da qualche parte nel tuo percorso e chiamalo come vuoi. Ho cambiato il nome del mio in "solo", quindi posso semplicemente digitare "up filename.txt" per caricare. Ricorda inoltre di aprirlo e modificare le variabili all'inizio dello script in modo che corrispondano al tuo ambiente.

    Questo script dovrebbe funzionare su qualsiasi cosa con una shell * nix e l'utility scp. Sto usando Ubuntu, ma dovrebbe funzionare su Solaris, OS X o anche su Windows con Cygwin installato.