Ошибка с gzip при использовании с tar

Вопрос или проблема

Я новичок в Ubuntu. У меня возникла ошибка при использовании функции tar вместе с gzip.
Я использовал следующий код:

find -type d -name 'doc*' | tar -czvf /path/where/gz/file/is/stored/file.tar.gz -T-

Но процесс начинается, начинается сжатие, и он прерывается, показывая следующее:

gzip: short write 
tar: write error: Broken pipe

и создается пустой tar.gz. Как я могу это исправить?

tar -zcf /path/to/be/stored/file.tar.gz * 

Это сработало. Но вы должны находиться в определенной папке с файлами, которые нужно сжать.

Вы предполагаете, что tar принимает список файлов для сохранения из STDIN. Это не так. См. man tar и info tar.

Лучший способ, если ваш список каталогов не слишком длинный, через подстановку команд:

tar -czvf /path/where/gz/file/is/stored/file.tar.gz \
    $( find . -type d -name 'doc*' -print)

Ответ или решение

Если вы столкнулись с ошибкой при использовании tar вместе с gzip на Ubuntu, важно понимать, что вызвало проблему и как ее можно исправить. Ваша изначальная команда:

find -type d -name 'doc*' | tar -czvf /path/where/gz/file/is/stored/file.tar.gz -T-

возможно, вызывает ошибку, потому что tar не принимает список файлов из стандартного ввода (STDIN) без корректного указания. Ошибка "gzip: short write" и "tar: write error: Broken pipe" говорит о том, что процесс запаковки был внезапно прерван.

Причины и Решения:

  1. Неправильное использование стандартного ввода:
    Команда tar не всегда корректно обрабатывает списки файлов через -T-, если они предоставляются через конвейер (pipe).

    Решение: Используйте подстановку команд. Это позволяет передать список файлов в tar через аргумент командной строки.

    tar -czvf /path/where/gz/file/is/stored/file.tar.gz $(find . -type d -name 'doc*')

    Это гарантирует, что tar получит все необходимые директории для архивации до начала выполнения.

  2. Передача файлов в текущей директории:
    Ваша альтернативная команда:

    tar -zcf /path/to/be/stored/file.tar.gz *

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

Оптимальные Практики:

  • Используйте абсолютные пути: Работая с архивами, лучше использовать абсолютные пути, чтобы избежать ошибок местоположения.

  • Проверяйте наличие файлов: Убедитесь, что команды find находит все ожидаемые файлы. Это можно сделать с помощью предварительного выполнения find без передачи его результат в tar:

    find . -type d -name 'doc*' -print
  • Используйте -v для отладочной информации: Ключ -v (подробно) покажет вам больше информации о процессах, которые выполняет tar. Это может помочь в диагностике проблем.

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

Оцените материал
Добавить комментарий

Капча загружается...