Вопрос или проблема
Я новичок в 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" говорит о том, что процесс запаковки был внезапно прерван.
Причины и Решения:
-
Неправильное использование стандартного ввода:
Команда tar не всегда корректно обрабатывает списки файлов через-T-
, если они предоставляются через конвейер (pipe).Решение: Используйте подстановку команд. Это позволяет передать список файлов в tar через аргумент командной строки.
tar -czvf /path/where/gz/file/is/stored/file.tar.gz $(find . -type d -name 'doc*')
Это гарантирует, что tar получит все необходимые директории для архивации до начала выполнения.
-
Передача файлов в текущей директории:
Ваша альтернативная команда:tar -zcf /path/to/be/stored/file.tar.gz *
работает, потому что вы запускаете ее из директории, в которой находятся необходимые файлы. Это ограничивает вашу гибкость, так как нужно вручную менять текущую директорию.
Оптимальные Практики:
-
Используйте абсолютные пути: Работая с архивами, лучше использовать абсолютные пути, чтобы избежать ошибок местоположения.
-
Проверяйте наличие файлов: Убедитесь, что команды find находит все ожидаемые файлы. Это можно сделать с помощью предварительного выполнения
find
без передачи его результат в tar:find . -type d -name 'doc*' -print
-
Используйте
-v
для отладочной информации: Ключ-v
(подробно) покажет вам больше информации о процессах, которые выполняет tar. Это может помочь в диагностике проблем.
Таким образом, применяя указанные методы и советы, вы сможете реализовать надежный процесс архивирования, избегая ошибок и недочетов. Корректное использование команд и их флагов помогает сделать процессы бесперебойными и эффективными.