#python #ssh #urllib #paramiko #tarfile
#python #ssh #urllib #парамико #tarfile
Вопрос:
Я хочу создать резервную копию удаленного каталога с большим количеством файлов, и из-за этого мне нужно сжать его перед загрузкой. Я могу получить доступ к этой папке через SSH или FTP. Хост работает под управлением Linux.
Я рассмотрел часть загрузки с aioftp
. Я использовал paramiko
и tar
команду Linux для сжатия каталога на удаленном хосте, но вместо этого я хочу использовать модули Python (из стандартной библиотеки или нет) и избегать использования команд Linux. Возможно, комбинация paramiko
для открытия сеанса, urllib
для создания удаленного объекта и tarfile
для его сжатия может выполнить работу, но я не нашел способ.
В конце концов, я хочу directory-backup.tar.gz
на своем локальном хостинге. Как я могу это сделать?
Ответ №1:
Вы должны сжать каталог с помощью инструментов на сервере.
Использование локального кода Python не имеет смысла. Чтобы сжать файлы локально, вам нужно будет загрузить несжатые файлы, сжать их (с помощью вашего локального кода Python) и загрузить сжатый архив, только чтобы загрузить его снова. Это противоречит цели сжатия, верно?
Если вы хотите использовать код Python для сжатия, вам придется запустить код Python на сервере. Либо загрузив скрипт и выполнив его на сервере, либо передав код удаленному python
процессу. Я не вижу большого преимущества в том, чтобы делать это по сравнению с использованием готовой tar
команды.
Комментарии:
1. Спасибо, что ответили. Что заставляет меня задуматься об этом, так это то, что
tar
иногда выдаетContent changed
предупреждение, которое я не могу предотвратить, потому что я не могу изменить условия удаленного каталога, а возвращаемый код равен 1 (например, критическая ошибка). Поэтому я хотел управлять им с помощью модуля Python и упростить его обработку.2. Кроме того, я уточнил в вопросе, что я хочу выполнить сжатие на удаленном хосте и после этого загрузить его на localhost, это цель резервного копирования.
3. Хорошо, но даже после вашего редактирования мне нечего добавить к моему ответу. Он все еще стоит.