コマンドラインで追加情報なしでzip内のファイルをリストする方法


37

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"

しかし、それは長く、エラーを起こしやすいです(たとえば、このリストのファイル名Archiveは削除されます)

unzip -lを使用した他のオプション(unzipのmanページを確認しましたが、見つかりませんでした)または他のオプションがありますか?

アーカイブを実際に解凍するのではなく、内部にあるファイルを確認することが重要です。


受け入れられた答えはこれよりもはるかに優れています。しかし、複数のgrep要素を持つものはすべて、通常は精度が大幅に向上したAwkスクリプトにリファクタリングできることに注意してください。awk 'NR >3 { if (/^ *---/) exit 0; print }'最初の3行とフッターをトリミングし、ファイル名だけを簡単に抽出することもできます(ヒント:)print substr($0, 29)
トリプリー

はい、私は完全に同意します、それがまさにその特定の質問をする理由です:より良い実行可能なソリューションを持っていること。
рüффп

回答:


55
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

強力なsedに感謝します。まさに私が望んでいたものです。また、zipinfoツールは興味深いです、私はそれを知りませんでした。
рüффп

ディレクトリを無視する方法はありますか?unzip -Z1 zipfile.zip出力結果:directory /およびdirectory / file.extension(注:。の付いたディレクトリ名はおそらくそうなので、aを追加し| grep .ても機能しません)
Matt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.