1

リモートサーバーでbashスクリプト(以下)を使用して(これまではsshを使用して接続)、一度に多数のpdfファイルをダウンロードするPythonスクリプトを実行しています(URLを含むテキストファイルからダウンロード場所を取得します)ループで。

ダウンロード時にファイルをリモートサーバーからローカルコンピューターに移動してから、リモートサーバーからファイルを削除したいと思います。これを行うためにbashスクリプトを拡張する方法はありますか?または、このタスクを完了するための代替手段はありますか?

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

4

1 に答える 1

1

[元の投稿者がサーバーからローカルコンピューターにscpできないという事実を反映するように編集されました。NATか何かの背後にあると思います]

[編集2:参考のために、現在のトンネルベースの回答を保持しています。ただし、元のポスターはローカルマシンにSSHで戻すことができないため、他の何かがトンネルをブロックしていると想定します。最後の提案を参照してください]。

わかりました。サーバーと自宅のコンピューターの間にトンネルを開く必要があります。したがって、次のコマンドを使用して、ローカルコンピューター(Unixベースだと思います。Macであるとおっしゃっていたので、それで問題ありません)からサーバーにsshで接続します。

ssh -R 10022:localhost:22 your_server_address

簡単に言うと、これにより、サーバーのポート10022(High(> 1024)ポートであるため、使用可能になる可能性があります)がローカルコンピューターのポート22(sshが通常リッスンする場所)に転送されます。つまり、これを実行した後、サーバーの10022ポートにSSHで接続すると、実際にはローカルコンピューターにSSHで接続していることになります。サーバーからテストする場合は、次のようにします。

ssh -p 10022 localhost

ローカルコンピュータのユーザー名とパスワードでログインすると、シェルプロンプトが表示されます。このテストを行う場合は、混乱しないように、ログアウトすることを忘れないでください。

トンネルを開いたら、その接続を開いたままにします。これを使用して、PDFなどをダウンロードするbashコマンドラインを実行できますが、これは必須ではありません。

次に、次のコマンドラインを試してください。

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

覚えておくべきいくつかのこと:

  • これは、scpが終了するまで待機し、その後、Pythonスクリプトが次のPDFをダウンロードします。PDFファイルをサーバーに長期間保持するのではなく、これが効果的に必要であるとおっしゃいました。
  • これにより、すべてのPDFファイルが現在のディレクトリからローカルコンピュータにコピーされます(その後、それらが消去されます)。したがって、以前は空だったディレクトリから実行することをお勧めします。
  • パスワードを入力しなくても(たとえば、共有キー認証を使用して)scpできると思います。そうしないと、パスワードを常に再入力しなければならないため、少し面倒になる可能性があります。

それはそれをする必要があります。

[トンネルが機能しない場合に備えて、この代替手段を追加するために編集]

それが失敗した場合、他の何かがサーバーからローカルマシンへのssh/scpをブロックしていると推測できます。その場合、あなたは別のことを試みるかもしれません:あなたのローカルマシンから、

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"

(sshへの「-n」スイッチが必要です。後続の$行をsshシェルにフィードしないでください。)

于 2010-06-17T15:48:54.767 に答える