Command-Line

如何在 zip 中列出文件而不在命令行中提供額外資訊

  • December 15, 2021

在我的 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 手冊頁並沒有找到任何選項)或其他工具可以做到這一點?

對我來說重要的是不要真正解壓縮檔案,而只是看看裡面有什麼文件。

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

引用自:https://unix.stackexchange.com/questions/128303