Сжатие папки без использования дополнительного места на диске

У меня есть экземпляр EC2 на 18 ГБ, который исчерпал пространство. Я хотел заархивировать и перенести файлы с сервера на локальный диск. На нем осталось только около 1% свободного места. Это означает, что я не могу сжать что-либо на диске, потому что он продолжает давать мне zip I/O error: No space left on device ошибка. Есть ли способ, которым я могу сжать все, не используя дополнительное место на диске?

2 ответа

Решение

Вы можете дать команду сжимать в стандартный вывод через ssh и перенаправлять стандартный вывод в файл. Что-то вроде:

ssh user@host "tar c /mydir | gzip -f" > myarchive.tar.gz

Следующие инструменты доступны в Ubuntu, и я проверил, что rsync, gzip а также tar также доступны в MacOS.

  • rsync которые могут копировать файлы и / или деревья каталогов локально и через сеть
  • gzip который сжимает отдельные файлы
  • tar который может создать архив с множеством файлов и деревьев каталогов и сжать, если вы укажете его

Изменить каталог

Изменить каталог с помощью

cd path-to-source-directory

в каталог, который вы хотите сжать.

rsync

У меня нет физического доступа к серверу. Я всегда общаюсь через SSH. Я посмотрю rsync. Благодарю.

rsync это мощный инструмент копирования, и он имеет встроенную проверку, что передача правильна.

  • Он может копировать файлы и / или деревья каталогов локально и через сеть
  • Это часто используется для резервного копирования
    • локально на внешний диск или
    • через сетевое соединение с сервером или между серверами

Это просто в использовании rsync, если у вас есть Ubuntu на обоих концах соединения, и я проверил, что есть rsync версия также в MacOS.

Мне нравится следующая командная строка, где опция

  • -H учитывает жесткие ссылки (и избегает двойных переводов / копий); если нет жестких ссылок, вы должны удалить эту опцию.
  • -a "архив" делает копию, которая подходит для резервного копирования или синхронизации
  • -v 'verbose' создает вывод всех файлов для копирования -n и все файлы скопированы в реальном случае (без -n)
  • -n делает его "пробным ходом", просто показывая, что он "хочет сделать"

    rsync -Havn source/ target
    

В вашем случае источник находится на сервере, и вы запускаете через ssh подключение. Итак, в клиенте (ваш компьютер Mac), запустите

rsync -avn user-id@ip-address:/path-to-source-directory/ path-to-target-directory

Пожалуйста, обратите внимание на косую черту после исходного каталога.

Если он выглядит хорошо, вы можете позволить ему выполнить передачу с помощью следующей команды (удалите n для "пробного запуска")

rsync -av user-id@ip-address:/path-to-source-directory/ path-to-target-directory

Советы и комментарии

  • После передачи вы можете делать все, что хотите, с копией в целевой директории. Я думаю, что вы хотите сжать его, и я предлагаю вам использовать tar для этой цели и создать тарбол.

  • Если вы не можете бежать rsync или же gzip или же tar в MacOS вы можете загрузить компьютер Mac с USB-накопителя или DVD-диска с помощью Ubuntu и запускать программы таким образом. (Рекомендации по загрузке компьютера с USB-накопителя или DVD-диска с Ubuntu применимы и к компьютеру с Windows.)

  • Вы можете прочитать встроенное руководство man rsync, man gzip а также man tar в вашем Ubuntu 16.04 LTS, и я уверен, что вы можете найти хорошие учебники через Интернет.

gzip

Изменить каталог с помощью cd path-to-source-directory в каталог, который вы хотите сжать.

Сжатие отдельных файлов с

gzip -c file > path-to-external-directory/file.gz

Перейдите в каталог, в который вы хотите извлечь файл, и запустите gunzip для распаковки

cd to-where-you-want-to-extract-the-files
gunzip -c path-to-external-directory/file.gz > file

tar

Изменить каталог с помощью cd path-to-source-directory в каталог, который вы хотите сжать.

Сжать группу файлов в "tarball", например

tar -cvzf path-to-external-directory/file.tar.gz file1 file2 file3

или если в целевом разделе на внешнем диске достаточно места для всего каталога

tar -cvzf path-to-external-directory/file.tar.gz .

Пробел и заключительная точка важны.

Вы можете "заглянуть" в файл tar с помощью команды

tar -tvf path-to-external-directory/file.tar.gz

Извлеките сжатые файлы из архива с помощью следующих команд

cd to-where-you-want-to-extract-the-files
tar -xvf path-to-external-directory/file.tar.gz
Другие вопросы по тегам