как получить файлы по мере их добавления на удаленный сервер

1

Я использую bash script (ниже) на удаленном сервере (до сих пор используя ssh для подключения) для выполнения python script, который загружает много файлов PDF по одному (получение загрузки местоположения из текстового файла с URL-адресом) в цикле.

Я хотел бы переместить файлы с удаленного сервера на локальный компьютер по мере их загрузки, а затем удалить файл с удаленного сервера. Есть ли способ расширить мой bash script, чтобы сделать это? Или есть альтернативы для выполнения этой задачи?

 while read line; do python python_script.py -l $line; done < pdfURLs.txt
  • 0
    Я только что понял: есть ли у удаленного сервера прямой доступ к вашему локальному компьютеру (т. Е. Можете ли вы перейти с сервера на локальный компьютер)?
  • 0
    Я не пробовал ничего подобного, но надеялся, что мне не придется открывать несколько соединений, и что я смогу сделать это через одно соединение scp или ssh (или что-то еще, что подойдет мне).
Теги:
ssh
scp

1 ответ

1
Лучший ответ

[Отредактировано с учетом того факта, что исходный плакат не может scp на свой локальный компьютер с сервера; Я предполагаю, что это за NAT или что-то в этом роде]

[Редактировать 2: я сохраняю текущий туннельный ответ, для справки; но, поскольку исходный плакат не может вернуть ssh обратно на свою локальную машину, я предполагаю, что что-то еще блокирует туннель. См. Предложение в конце].

Хорошо, вам нужно открыть туннель между сервером и домашним компьютером. Итак, ssh с вашего локального компьютера (я предполагаю, что он основан на Unix, вы упомянули Mac, так что хорошо) на сервер с помощью этой команды:

ssh -R 10022:localhost:22 your_server_address

Вкратце, это переведет порт сервера 10022 (это высокий ( > 1024) порт, поэтому он может быть доступен) на ваш локальный компьютерный порт 22 (который обычно прослушивается ssh). То есть, как только вы это сделаете, если вы отправите ssh в порт сервера 10022, вы фактически зашли на свой локальный компьютер. Если вы хотите протестировать его, с сервера выполните:

ssh -p 10022 localhost

введите имя пользователя и пароль своего локального компьютера, и вы должны увидеть приглашение его оболочки. Если вы выполните этот тест, помните, чтобы выйти из системы, чтобы не путать себя.

Как только вы открыли туннель, держите это соединение открытым. Вы можете использовать его для запуска командной строки bash, которая загружает PDF и т.д., Но это необязательно.

Затем попробуйте следующую строку командной строки:

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 script загрузит следующий 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"

(Переключатель "-n" в ssh необходим, а не кормить последующие строки $в оболочке ssh.)

  • 0
    Позвольте мне немного пояснить, что скрипт python выполняет загрузку по URL-адресу, загружает PDF-файл на страницу, а затем присваивает ему новое имя файла с использованием некоторых метаданных, поэтому значением для $ line будет baseURL.com/content. / hashcode, а затем на удаленном сервере файл сохраняется как pdf_content_title.pdf (а не то значение, которое было передано в $ line). Я думаю, я мог бы изменить скрипт Python, чтобы присвоить имя файла URL.
  • 0
    @rdp: подоболочка, вероятно, не нужна.
Показать ещё 16 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню