Pythonic способ сжатия удаленного каталога с помощью SSH или FTP

#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. Хорошо, но даже после вашего редактирования мне нечего добавить к моему ответу. Он все еще стоит.