Frage

Ich bin mit einem Bash-Skript (siehe unten) auf einem entfernten Server (bisher mit ssh zu verbinden) ein Python-Skript ausführen, dass Downloads viel pdf einer nach dem anderen Dateien (immer die Download-Adressen aus einer Textdatei mit die URL) in einer Schleife.

Ich mag die Dateien aus dem Remote-Server auf meinem lokalen Computer bewegen, wie sie heruntergeladen werden, und dann die Datei aus dem Remote-Server löschen. Gibt es eine Möglichkeit, dass ich meinen Bash-Skript, dies zu tun erweitern? Oder gibt es Alternativen für diese Aufgabe zu erledigen?

 while read line; do python python_script.py -l $line; done < pdfURLs.txt

War es hilfreich?

Lösung

[Edited die Tatsache widerzuspiegeln, dass das ursprüngliche Plakat nicht in seinem lokalen Computer vom Server scp kann; Ich nehme an, es ist hinter NAT oder etwas Derartiges]

[Edit 2: Ich bin die aktuelle Tunnel-basierte Antwort zu halten, als Referenz; aber da das ursprüngliche Plakat nicht in der Lage ist, in seiner lokalen Maschine ssh zurück, dann gehe ich davon etwas anderes in den Tunnel blockiert. Siehe den Vorschlag am Ende].

Ok, müssen Sie einen Tunnel zwischen dem Server und Ihrem Computer zu Hause öffnen. Also, ssh von Ihrem lokalen Computer (ich nehme an, es ist auf Unix-Basis, die Sie erwähnt ist ein Mac, so dass die Fein) in den Server mit diesem Befehl:

ssh -R 10022:localhost:22 your_server_address

Kurz gesagt, wird dies der Port des Servers weiterleiten 10022 (es ist ein hoch (> 1024) Port, so ist es wahrscheinlich, verfügbar zu sein) auf dem lokalen Computer des Port 22 (das ist, wo ssh in der Regel hört). Das heißt, sobald Sie das getan haben, wenn Sie in den 10022-Port des Servers ssh, sind Sie eigentlich in Ihrem lokalen Computer sshing. Wenn Sie es testen wollen, vom Server zu tun:

ssh -p 10022 localhost

Login mit Ihrem lokalen Computer Benutzernamen und Kennwort ein, und Sie sollten seine Shell-Prompt sehen. Wenn Sie diesen Test durchführen, remeber abzumelden, um nicht selbst zu verwechseln.

Wenn Sie den Tunnel geöffnet haben, halten diese Verbindung offen. Sie können es verwenden, um die Bash-Befehlszeile, die Downloads der PDF usw. laufen, aber das ist nicht notwendig.

Dann versuchen Sie die folgende Befehlszeile:

while read line; do python python_script.py -l "$line"; scp -P 10022 *.pdf localhost:path/to/put/files/; rm *.pdf; done < pdfURLs.txt

Ein paar Dinge im Auge zu behalten:

  • Diese wartet, bis scp beendet und erst dann wird der Python-Skript, das nächste PDF heruntergeladen werden. Sie haben erwähnt, Sie effektiv diese wollten, nicht lange die PDF-Dateien auf dem Server zu halten.
  • Das kopiert alle PDF-Dateien aus dem aktuellen Verzeichnis auf dem lokalen Computer (und löscht sie dann), so vorzugsweise laufen diese aus einem zuvor leeren Verzeichnis.
  • Ich nehme an, Sie ohne scp können ein Passwort eingeben (Shared-Key-Authentifizierung verwendet wird, zum Beispiel), sonst könnte es ein bisschen nervig, mit Ihrem Passwort der ganzen Zeit in dem Feld eintragen.

Das sollte es tun.

[Edited diese Alternative hinzuzufügen, denn wenn der Tunnel nicht funktioniert]

Wenn das nicht funktioniert, kann ich nur annehmen, dass etwas anderes Ihre ssh / scp vom Server auf den lokalen Rechner blockiert. In diesem Fall können Sie etwas anderes versuchen: von Ihnen local Maschine, tut

while read line; do ssh -n server_address "cd tmp_download_directory && rm -f *.pdf && python python_script.py -l $line" && scp server_address:tmp_download_directory/*.pdf /local/path/to/put/files/; done < pdfURLs.txt; ssh server_address "rm -f tmp_download_directory/*.pdf"

(Der "-n" -Schalter auf ssh ist notwendig, nicht zu Futter subsequente $ Linien in den SSH-Shell.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top