использовать tar для извлечения и немедленного сжатия файлов из tarball

У меня есть сжатый tarball (например, foo.tar.gz ), из которого я хочу извлечь все файлы, но файлы в tarball не сжимаются. То есть, содержимое foo.tar.gz – это не сжатые txt файлы.

В моей файловой системе недостаточно места для непосредственного извлечения файлов, поэтому я хочу извлечь эти файлы и немедленно сжать их, когда они записаны на диск. Я не могу просто извлечь файлы, а затем gzip извлеченные файлы, потому что, как я уже сказал, места в файловой системе недостаточно. Я также хотел бы убедиться, что оригинальные имена файлов, включая их каталоги, точно сохраняются на диске. Поэтому, если один из файлов в tarball равен /a/b/c/foo.txt , в конце процесса я хотел бы иметь /a/b/c/foo.txt.gz

Как я могу это сделать?

One Solution collect form web for “использовать tar для извлечения и немедленного сжатия файлов из tarball”

Это не будет быстро, особенно для большого tarball с большим количеством файлов, но в bash вы можете это сделать:

 tar -tzf tarball.tgz | while IFS= read -r file; do tar --no-recursion -xzf tarball.tgz -- "$file" gzip -- "$file" done 

Первая команда tar извлекает имена файлов в tarball и передает эти имена в цикл while while read ... . Затем имя файла передается во вторую команду tar, которая извлекает только этот файл , который затем сжимается до того, как будет извлечен следующий файл. Флаг --no-recursion используется, поэтому попытка извлечь каталог не извлекает все файлы в этом каталоге, что обычно делает tar.

Вам все равно потребуется достаточно свободного места, чтобы хранить несколько больше, чем исходный размер сжатого tarball.

  • Почему был написан шар, если смола уже существовала?
  • Как проверить, что «ls» выводит что-то ... с помощью одной команды?
  • Сохраняет ли параметр детализации дег производительности?
  • Производительность `tar -xf` (размер блока)
  • Список исключений из списка больше не работает после обновления до Debian stretch
  • Должен ли я ставить старые проекты в tarballs
  • Как установить загруженное программное обеспечение с помощью менеджеров пакетов? (Ubuntu Linux)
  • По соглашению, куда пакеты идут, чтобы установить на другие машины?
  • Эффективно удалять файлы из больших .tgz
  • Использование файлов, имеющих пробелы в их имени в трубах
  • Как загрузить каталог в кеш файловой системы?
  • Interesting Posts

    Rsync «находит» файлы, которые неявно исключены

    В командной строке я могу перенаправить вывод в файл WITHOUT>, >> или | операторы?

    lsof – отладить выходную информацию

    Каким образом в Linux для пользователя без полномочий root запускается загрузка модуля ядра

    Расписание резервного копирования с уведомлением?

    Как извлечь сходство между двумя строками

    Запуск массива btrfs RAID 5 в Arch Linux

    Как показать числовую последовательность символов строки?

    Является ли Ubuntu LTS бинарным, совместимым с Debian?

    Поделиться домашним каталогом между Arch и Ubuntu

    Хранить секретный ключ для удаленного архива пакетов reprepro локально

    Как подключиться к Wi-Fi на Qubes OS?

    Почему мои виртуальные машины Windows теперь дают мне NS_ERROR_FAILURE при запуске, так как я обновил VirtualBox до 5.1.20?

    Как подключить терминал к отсоединенному процессу?

    Неужели RPM автоматически повторяет попытки загрузки?

    Linux и Unix - лучшая ОС в мире.