2013-05-23 20 views
43

Diverse volte nel corso della giornata, è possibile che venga eseguito un test in cui è necessario esaminare un file di registro su un server remoto. Mi sono abituato a usare il mio terminale per il sftp nel server remoto e tirare il file di registro desiderato a /tmp sul mio computer locale.sftp a riga singola dal terminale

Stavo guardando attraverso le opzioni oggi usando man sftp nel tentativo di capire un modo per eseguire i seguenti comandi fondamentalmente in una singola riga in modo da non dover digitare un comando, premere invio, digitare un comando premere immettere, ecc

(quello che faccio ora)

sftp [email protected] 
--mypassword at prompt 
lcd /tmp 
get /dir/dir/dir/dir/file 
quit 

ho trovato mentre guardando attraverso man sftp un riferimento a scp che non ho usato prima. Sento che potrebbe essere quello che sto cercando, ma non ho visto un modo per specificare dove volevo che il file copiato in modo sicuro andasse.

Qualcuno potrebbe fornirmi un modo per ottenere /dir/file da un server remoto e scaricarlo in /tmp/file_plus-my-description?

speravo di essere in grado di eseguire un comando SFTP o SCP simile a una copia regularUNIX come:

scp [email protected] /dir/file /tmp/file_plus-my-description 

Sto utilizzando il costruito nel Terminal in Mac OS X 10.8. Grazie.

risposta

107

Aggiornamento settembre 2017 - tl; dr

Scarica un singolo file da un server FTP remoto alla vostra macchina:

sftp [email protected]:remoteFileName localFileName 

Carica un singolo file dalla tua macchina ad un emote server ftp:

sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}' 

risposta originale:

Ok, quindi mi sento un po 'stupido. Ma l'ho capito. Ho quasi avuto al vertice con:

sftp [email protected] remoteFile localFile 

L'unica documentazione indicata nel terminale è questo:

sftp [[email protected]]host[:file ...] 
sftp [[email protected]]host[:dir[/]] 

Tuttavia, mi sono imbattuto in this site che mostra il seguente sotto la sinossi:

sftp [-vC1 ] [-b batchfile ] [-o ssh_option ] [-s subsystem | sftp_server ] [-B buffer_size ] [-F ssh_config ] [-P sftp_server path ] [-R num_requests ] [-S program ] host 
sftp [[[email protected]]host[:file [file]]] 
sftp [[[email protected]]host[:dir[/]]] 

Quindi la semplice risposta è che basta fare : dopo l'utente e l'host, quindi il file remoto e il nome file locale. Incredibilmente semplice!

singola linea, sftp copiare file remoto:

sftp [email protected]:remoteFileName localFileName 
sftp [email protected]:/tmp/myLogFile.log /tmp/fileNameToUseLocally.log 

Aggiornamento Feb 2016

Nel caso qualcuno sta cercando il comando per fare il contrario di ciò e spinta un file dal tuo computer locale a un server remoto in un comando a linea singola sftp, l'utente @Thariama in basso ha pubblicato la soluzione per farlo. Consiglio a tutti loro per il codice aggiuntivo.

sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}' 
+0

c'è un modo per copiare il file in una sola riga? – Thariama

+0

@Thariama Non sono sicuro di cosa stai chiedendo. Il codice sopra mostra come copiare un file da un server remoto usando sftp sul computer locale in una sola riga. 'sftp kyle @ kylesserver: /tmp/myLogFile.log/tmp/fileNameToUseLocally.log' – Kyle

+11

stavo chiedendo il contrario (copia su server remoto), ma l'ho trovato io stesso: _sftp {utente} @ {host}: { dir} <<< $ 'put {path to file}' _ – Thariama

1

sftp supporta i file batch.

Dalla pagina man:

-b batchfile 

Batch mode reads a series of commands from an input batchfile instead of stdin. 
Since it lacks user interaction it should be used in conjunction with non-interactive 
authentication. A batchfile of `-' may be used to indicate standard input. sftp 
will abort if any of the following commands fail: get, put, rename, ln, rm, mkdir, 
chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir. Termination 
on error can be suppressed on a command by command basis by prefixing the command 
with a `-' character (for example, -rm /tmp/blah*). 
+0

come questo è un processo che faccio più volte al giorno per i diversi file in luoghi diversi, Sarebbe bello poter semplicemente memorizzare un comando che potrei digitare in una singola riga del mio terminale (che è sempre aperta) e premere invio. Usare '--batch' mi richiederebbe di mettere i miei comandi in un file e poi passare in quel file come parametro. Sto ancora giocando con 'scp', penso che possa contenere la mia soluzione. – Kyle

+0

Forse "aspettarsi" è ciò che stai cercando. http://www.linuxjournal.com/article/3065 – synthesizerpatel

4

Per SCARICARE un singolo file, è necessario creare uno script di bash. Qualcosa come il seguente dovrebbe funzionare su OS X se hai installato sshpass.

Usage:

sftpx <password> <[email protected]> <localfile> <remotefile> 

mettere questo script da qualche parte nel tuo percorso e chiamare sftpx:

#!/bin/bash 

export RND=`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32` 
export TMPDIR=/tmp/$RND 
export FILENAME=$(basename "$4") 
export DSTDIR=$(dirname "$4") 

mkdir $TMPDIR 
cp "$3" $TMPDIR/$FILENAME 

export SSHPASS=$1 
sshpass -e sftp -oBatchMode=no -b - $2 << ! 
    lcd $TMPDIR 
    cd $DSTDIR 
    put $FILENAME 
    bye 
! 

rm $TMPDIR/$FILENAME 
rmdir $TMPDIR 
+0

Grazie per la risposta, tuttavia, la risposta che ho indicato sopra utilizzerà il comando a riga singola con sftp per ottenere un file da un server remoto e salvare il file in una posizione specifica sul computer locale. Ho verificato che funzionerà su OS X con solo sftp. – Kyle

+2

Sì, questa è sicuramente la migliore risposta per il trasferimento da remoto a locale. Tuttavia, tuttavia, aggiungerei una soluzione per fare il contrario: da locale a remoto. Nel caso sia utile a chiunque. Grazie! – sstur

Problemi correlati