Skip to main content

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

Geoffrey Carr

Un compito molto comune per uno sviluppatore web è caricare 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 di 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 io non ne sono consapevole.

Successivamente, ho impostato gli accessi ssh automatici. Per fare ciò, è necessario prima eseguire l'utilità keygen 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 [email protected] ‘cat >> .ssh/authorized_keys’

Ora abbiamo gli accessi ssh automatizzati, 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 / 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 il seguente:

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.

Link
Plus
Send
Send
Pin