2013-05-23 7 views
43

Ich kann mehrmals im Laufe des Tages einen Test ausführen, bei dem ich eine Protokolldatei auf einem Remote-Server durchsehen muss. Ich habe mich daran gewöhnt, mein Terminal zu sftp in den Remote-Server zu verwenden und ziehen Sie die gewünschte Protokolldatei auf meinem lokalen Computer auf /tmp herunter.Single Line sftp von Terminal

Ich habe die Optionen heute unter Verwendung man sftp in einem Versuch, herauszufinden, eine Möglichkeit, die folgenden Befehle im Grunde in einer einzigen Zeile, so dass ich muss nicht einen Befehl eingeben, drücken Sie die Eingabetaste, geben Sie einen Befehl drücken drücken eingeben usw.

(was ich jetzt tun)

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

ich fand, während er durch man sftp ein Verweis auf scp suchen, die ich noch nie benutzt haben. Ich glaube, es könnte das sein, wonach ich suche, aber ich habe keine Möglichkeit gesehen, anzugeben, wohin die sicher kopierte Datei gehen soll.

Könnte mir jemand einen Weg geben, um /dir/file von einem Remote-Server zu bekommen und es auf /tmp/file_plus-my-description herunterladen zu lassen?

Ich hatte gehofft, wie in der Lage sein einen SFTP oder scp Befehl ähnlich einer regularUNIX Kopie auszuführen:

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

Ich verwende in Terminal in Mac OS X 10.8 die gebaut. Vielen Dank.

Antwort

107

-Update September 2017 - tl; dr

Herunterladen eine einzelne Datei von einem entfernten FTP-Server auf Ihre Maschine:

sftp [email protected]:remoteFileName localFileName 

Laden Sie eine einzelne Datei von Ihrem Rechner nach ar FTP-Server-Emote:

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

Ursprüngliche Antwort:

Ok, also ich fühle mich ein wenig dumm. Aber ich habe es herausgefunden. Ich hatte es fast an der Spitze mit:

sftp [email protected] remoteFile localFile 

Die einzige Dokumentation im Terminal dargestellt, ist dies:

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

Allerdings habe ich über this site kam, die die folgenden unter der Übersicht zeigt:

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[/]]] 

Also die einfache Antwort ist, tun Sie einfach : nach Ihrem Benutzer und Host dann die Remote-Datei und lokalen Dateinamen. Unglaublich einfach!

Einzeilig, kopieren SFTP Remote-Datei:

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

aktualisieren Feb 2016

Falls sich jemand für den Befehl sucht der Rückseite dieses und Push eine Datei zu tun, von Ihrem lokaler Computer zu einem Remote-Server in einer einzigen Zeile sftp Befehl, Benutzer @Thariama unten veröffentlichte die Lösung, um das zu erreichen. Hut zu ihnen für den zusätzlichen Code.

+0

gibt es eine Möglichkeit, die Datei in einer einzigen Zeile zu kopieren? – Thariama

+0

@Thariama Ich bin mir nicht sicher, was Sie fragen. Der obige Code zeigt Ihnen, wie Sie eine Datei von einem entfernten Server mit sftp auf Ihrem lokalen Rechner in einer einzigen Zeile kopieren. 'sftp kyle @ kylesserver: /tmp/myLogFile.log/tmp/fileNameToUseLocally.log' – Kyle

+11

Ich fragte umgekehrt (Kopie auf Remote-Server), aber ich fand es selbst: _sftp {user} @ {host}: { dir} <<< $ 'Put {Pfad zur Datei}' _ – Thariama

1

sftp unterstützt Batchdateien.

Aus der Manpage:

-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

Da dies ein Prozess, den ich tue mehrmals täglich für verschiedene Dateien an verschiedenen Orten, es Es wäre schön, wenn ich mir einen Befehl einprägen könnte, den ich in eine einzige Zeile in meinem Terminal eingeben könnte (die immer geöffnet ist) und Enter drücke. Die Verwendung von '--batch' würde erfordern, dass ich meine Befehle in eine Datei setze und dann diese Datei als Parameter übergebe. Ich spiele immer noch mit 'scp', ich glaube es könnte meine Lösung enthalten. – Kyle

+0

Vielleicht "erwarten" ist dann, wonach Sie suchen. http://www.linuxjournal.com/article/3065 – synthesizerpatel

4

Zum UPLOAD einer einzelnen Datei müssen Sie ein Bash-Skript erstellen. So etwas wie das Folgende sollte unter OS X funktionieren, wenn Sie sshpass installiert haben.

Verbrauch:

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

Dieser Skript irgendwo in Ihrem Pfad und nennt es 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

Danke für die Antwort, aber die Antwort, die ich oben angegeben habe, wird einen einzigen Zeilenbefehl mit sftp verwenden, um eine Datei von einem Remote-Server zu erhalten und die Datei an einem bestimmten Ort auf Ihrem lokalen Rechner zu speichern. Ich habe überprüft, dass es unter OS X nur mit sftp funktioniert. – Kyle

+2

Ja, das ist sicherlich die beste Antwort für die Übertragung von Remote zu Local. Allerdings würde ich eine Lösung hinzufügen, um das Gegenteil zu tun: lokal zu remote. Nur für den Fall, dass es für jemanden hilfreich ist. Vielen Dank! – sstur