Подсчитать количество предметов верхнего уровня в ZIP-архиве

228
BallpointBen

Я ищу команду терминала для подсчета количества элементов верхнего уровня в ZIP-архиве. Я знаю, что zip -l archive.zipпокажет количество файлов, но это покажет все файлы, а не только элементы верхнего уровня. Если archive.zipразархивировать к следующему (* указывает на верхний уровень)

* Dir1 File1 File2 * Dir2 File3 File4 File5 File6 * Dir3 * File7 * File8 

тогда я хотел бы программу для вывода 5.

3
Используйте `unzip -l archive.zip | grep / | grep -v" /.*/"|wc -l`. Первый фильтр показывает только строки с файлами, второй удаляет подкаталоги, а третий возвращает количество строк. Если в архиве есть абсолютные пути, вам нужно разрешить две косые черты и исключить три или более. AFH 7 лет назад 0
Это показывает количество предметов не верхнего уровня. Но я думаю, я могу просто вычесть из вывода `unzip -l archive.zip | grep -v / | wc -l`, верно? Извините, что мой оригинальный пост не был понятен BallpointBen 7 лет назад 0
Если вы пропустите `| wc -l`, вы увидите рассматриваемые файлы, и это файлы верхнего уровня. Существует ошибка (!): Если путь к архиву содержит один `/`, он будет засчитан, поэтому вам необходим дополнительный фильтр для его исключения, например, замените `grep /` на `grep" ^. * / "`. AFH 7 лет назад 0

1 ответ на вопрос

0
BallpointBen

Для вдохновения воспользовался AFH

zipinfo -1 archive.zip |  egrep '^[^/]+/?$' |  egrep -v '__MACOSX' |  wc -l | awk '{$1=$1};1' 

Что оно делает:

Get list of files in archive Filter for top-level files or dirs; must either contain no '/' or end in '/' Remove lines containing __MACOSX (for archives created on a Mac) Get line count Remove trailing whitespace; http://unix.stackexchange.com/a/205854/169465 

Похожие вопросы