Linux Просмотрщик труб, как разбить трубу - PullRequest
3 голосов
/ 20 февраля 2020

Я пытаюсь извлечь большой файл .tar, используя pv.

pv large_file.tar.gz | tar -xcf /../MyFolder.

Команда pv работает, как и ожидалось, показывая прогресс в консоли.

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

Я пытался сделать это с тройником, но не смог заставить его работать.

pv large_file.tar.gz | tee /tmp/strout.log | tar -xcf /../MyFolder

Какие-либо предложения, как я могу отобразить прогресс на консоли и в то же время сохранить его в файл?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

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

Учитывая, что ../MyFolder существует, ваша первая команда должна быть

    pv large_file.tar.gz | tar -xz -C ../MyFolder

Если вы вставляете тройной вызов между pv и tar вызовами, тогда вся цепочка работает.

    pv large_file.tar.gz | tee /tmp/strout.log | tar -xz -C ../MyFolder

Однако я не уверен, что он делает то, что вы ожидаете. Если вы передадите вывод pv в tee, tee направит его в tar и выгрузит то же содержимое, что и исходный tar, в /tmp/strout.log, в результате чего ваш tar извлечется в ../MyFolder и скопирован в /tmp/strout.log .

РЕДАКТИРОВАТЬ
Как предлагает @DownloadPizza, вы можете использовать подстановку процесса (см. Как мне записать stderr в файл при использовании «tee» с конвейером? ). Используя флаг -f с pv, ваша команда станет

    pv -f large_file.tar.gz 2> >(tee /tmp/strout.log) > >(tar -xz -C ../MyFolder)

и выдаст ожидаемый результат.

2 голосов
/ 20 февраля 2020

PV прогресс отправляется на stderr, вы можете попробовать это ?: pv large_file.tar.gz > >(tar -xz -C ./MyFolder/) | echo вам может понадобиться отредактировать команду tar, так как я не могу заставить вашу работу работать на меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...