В моей командной строке bash при использовании unzip -l test.zip
я получаю такой вывод:
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
810000 05-07-2014 15:09 file1.txt
810000 05-07-2014 15:09 file2.txt
810000 05-07-2014 15:09 file3.txt
--------- -------
2430000 3 files
Но меня интересуют только строки, содержащие данные файла.
Я попробовал сделать фильтрацию с помощью grep следующим образом:
unzip -l test.zip | grep -v Length | grep -v "\-\-\-\-" | g -v Archive | grep -v " files"
Но это долго и подвержено ошибкам (например, имя файла Архив в этом списке будет удалено)
Есть ли другие опции для unzip -l (я проверил страницу руководства unzip и не нашел ни одной) или другой инструмент для этого?
Для меня важно не распаковывать архив, а просто посмотреть, какие файлы внутри.
решение1
zipinfo -1 file.zip
Или:
unzip -Z1 file.zip
Перечислил бы только файлы.
Если вам по-прежнему нужна дополнительная информация для каждого имени файла, вы можете сделать следующее:
unzip -Zl file.zip | sed '1,2d;$d'
Или:
unzip -l file.zip | sed '1,3d;$d' | sed '$d'
Или (предполагая GNU head
):
unzip -l file.zip | tail -n +4 | head -n -2
Или вы можете использовать libarchive
's bsdtar
:
$ bsdtar tf test.zip
file1.txt
file2.txt
file3.txt
$ bsdtar tvf test.zip
-rw-rw-r-- 0 1000 1000 810000 Jul 5 2014 file1.txt
-rw-rw-r-- 0 1000 1000 810000 Jul 5 2014 file2.txt
-rw-rw-r-- 0 1000 1000 810000 Jul 5 2014 file3.txt
$ bsdtar tvvf test.zip
-rw-rw-r-- 0 1000 1000 810000 Jul 5 2014 file1.txt
-rw-rw-r-- 0 1000 1000 810000 Jul 5 2014 file2.txt
-rw-rw-r-- 0 1000 1000 810000 Jul 5 2014 file3.txt
Archive Format: ZIP 2.0 (deflation), Compression: none