Сжатие папки без использования дополнительного места на диске
У меня есть экземпляр 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