У меня невероятно большой архив. Я бы извлек несколько файлов из многих тысяч в архиве. Я использую CentOS 6.10 с GPFS 4.2.3. Я видел из этот ответ Этот pigz полезен для извлечения всего tar.ball. Извлечение всего tar-файла бесполезно, потому что это займет терабайты пространства.
Я пробовал что-то вроде:
$ pigz -dc ../test.tar.gz | tar xf test/analysis/something/dist.txt
tar: test/analysis/something/dist.txt: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
Я не совсем уверен, как пройти test/analysis/something/dist.txt
в качестве аргумента tar
в контексте конвейера вывода pigz
. Моя интуиция подсказывает использовать xargs
, но это тоже не удается.
$ pigz -dc ../test.tar.gz | xargs -I var | tar xf var test/analysis/something/dist.txt
tar: var: Cannot openxargs: Warning: a NUL character occurred in the input. It cannot be passed through in the argument list. Did you mean to use the --null option?
: No such file or directory
tar: Error is not recoverable: exiting now
xargs: /bin/echo: terminated by signal 13
ВОПРОС
pigz
?Проблема с вашей командой заключается в том, что вы распаковываете файл в стандартный вывод, но вместо того, чтобы читать его из стандартного ввода с помощью tar, вы говорите ему извлечь из несуществующего файла.
Правильная команда будет:
$ pigz -dc ../test.tar.gz | tar xf - test/analysis/something/dist.txt
# ^- this dash tells tar to read from stdin
Однако в основном вы распаковываете файл в свою память, поэтому, если у вас нет доступных терабайт памяти, он заполнится даже быстрее, чем распаковка на диск.
Согласитесь с автором выше, просто упомяните о навигации по файлам внутри tar-архива:
pigz -dc <archive.tar.gz> | tar xf - <file-with-path-inside-archive>
попробуйте проверить / просмотреть архив (опция tar -t
) для вашего файла:
pigz -dc <archive.tar.gz> | tar tf -
искать полное имя файла в архиве:
pigz -dc <archive.tar.gz> | tar tf - | grep <file-name>