Единственный метод, который работает корректно во всех случаях, — это использоватьstar -find
:
star -t -v -f file.tar -find -type d | wc -l
работает во всех случаях, даже если имена каталогов не заканчиваются косой чертой. Грязный трюк с добавлением косой черты к именам каталогов был введен примерно в 1980 году, когда формат tar еще не знал о типе файла «каталог». POSIX не требует этого, и существуют реализации tar, которые не добавляют косую черту к именам каталогов.
Обратите внимание, что вам может понадобиться grep для '^ 0 d'
, чтобы убедиться, что вы учитываете только начало реальных строк списка в случае, если пути содержат символы новой строки, или с помощью:
star -t -f file.tar -find -type d -print0 -false
, а затем подсчитать количество нулевых символов в выводе, например, путем передачи вывода в:
LC_ALL=C tr -cd '\0' | wc -c