Я использую bash script (ниже) на удаленном сервере (до сих пор используя ssh для подключения) для выполнения python script, который загружает много файлов PDF по одному (получение загрузки местоположения из текстового файла с URL-адресом) в цикле.
Я хотел бы переместить файлы с удаленного сервера на локальный компьютер по мере их загрузки, а затем удалить файл с удаленного сервера. Есть ли способ расширить мой bash script, чтобы сделать это? Или есть альтернативы для выполнения этой задачи?
while read line; do python python_script.py -l $line; done < pdfURLs.txt
[Отредактировано с учетом того факта, что исходный плакат не может 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
Несколько вещей, которые нужно иметь в виду:
Это должно сделать это.
[Отредактировано, чтобы добавить эту альтернативу, когда туннель не работает]
Если это не удается, я могу только предположить, что что-то еще блокирует ваш 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.)