2

Существует множество решений по подсчету файлов в файле .tar . Но я не нашел решения для подсчета количества файлов в файлах .tar внутри другого файла .tar без извлечения.

Например:

  • Big.tar содержит

    • a.tar
    • b.tar
    • c.sh

Я могу извлечь big.tar а затем tar -tvf этих a.tar и b.tar но нам хотелось бы знать, есть ли лучшее решение для Linux?

1 ответ1

0

Краткий ответ: нет.

Правильный путь будет что-то вроде

$ 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .