Краткий ответ: нет.
Правильный путь будет что-то вроде
$ tar -t -f <(tar -x -O -f big.tar a.tar) | wc -l
или же
$ tar -x -O -f big.tar a.tar | tar -t -f - | wc -l
Это извлечет a.tar
из big.tar
и передаст его непосредственно другому процессу tar
без предварительного извлечения в файл. Обратите внимание, что он все еще извлекает a.tar
, а не записывает на диск.
Можно извлечь несколько слоев tar
за один раз, но для этого вам нужно написать программу, так как я не думаю, что кто-то ее уже написал, и это не будет тривиальным делом.
Редактировать: Вы можете изменить приведенный выше сценарий оболочки, если хотите подсчитать файлы во ВСЕХ подархивах:
tar -t -f big.tar | egrep '\.tar$' | while read f
do
tar -t -f <(tar -x -0 -f big.tar "$f")
done | wc -l
Или с GNU Parallel:
tar -t -f big.tar | egrep '\.tar$' | parallel "tar -t -f <(tar -x -0 -f big.tar {})" | wc -l