GNU/Linux >> Linux の 問題 >  >> Linux

zip内のディレクトリのリストを取得するには?

オープンソースの Zip_Dir_List ツールは、明示的なディレクトリ エントリを持たない Zip アーカイブの場合でも、すべてのディレクトリを一覧表示します。リンクからリポジトリに移動し、readme.txt のビルド手順に従います。


ディレクトリのみを一覧表示するには:

unzip -l foo.zip "*/"

出力 (例):

Archive:  foo.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2015-09-10 20:10   work/
        0  2015-08-31 10:45   work/test1/
        0  2015-08-31 10:50   work/test1/cc/
        0  2015-08-31 10:45   work/test1/dd/
        0  2015-08-31 10:45   work/test1/aa/
        0  2015-08-31 10:45   work/test1/bb/
        0  2015-09-09 21:17   work/tmp/
        0  2015-08-23 18:49   work/tmp/work/
        0  2015-09-08 19:33   work/tmp/work/loop/
        0  2015-08-15 16:00   work/tmp/work/1/
        0  2015-08-15 16:00   work/1/
        0  2015-08-24 18:40   work/dir/
        0  2015-09-05 18:07   work/rename/
---------                     -------
        0                     13 files

または使用

zipinfo -1 foo.zip "*/"

出力 (例):

work/
work/test1/
work/test1/cc/
work/test1/dd/
work/test1/aa/
work/test1/bb/
work/tmp/
work/tmp/work/
work/tmp/work/loop/
work/tmp/work/1/
work/1/
work/dir/
work/rename/

Cygwin の場合

私の Cygwin では、これらのいずれも動作しませんでした。すぐに使用するために、1 つのディレクトリの深さを取得するだけで済みます。

zipinfo -1 foo.zip | grep -o "^[^/]\+[/]" | sort -u

他のディレクトリについては、 xargs を使用できます 次のような他の解析と組み合わせて:

## PSEUDOCODE
$ zipinfo -1 foo.zip | \
# from the pipe, run 
xargs \
# do something like the following while loop, going one file at a time
while there is still a '/' in the line; do
  parse off "[^/]+([/]|)$" from the line
  print out the new line
done | \
sort -u

システム情報

$ uname -a
CYGWIN_NT-10.0 C-D-ENG-E-INT3 2.11.2(0.329/5/3) 2018-11-08 14:34 x86_64 Cygwin

$ bash --version
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ systeminfo | sed -n 's/^OS\ *//p'
Name:                   Microsoft Windows 10 Enterprise
Version:                10.0.17134 N/A Build 17134
Manufacturer:           Microsoft Corporation
Configuration:          Member Workstation
Build Type:             Multiprocessor Free

$

unzip -l をパイプしてみることができます awkまで このように:

unzip -l foo.zip | awk '/\/$/ { print $NF }'

unzip -l 内のすべてのディレクトリ スラッシュと $NF で終わる出力 ディレクトリ パスのみを出力します。


Linux
  1. Linuxでファイルとディレクトリをアーカイブする方法[パート2]

  2. LinuxでCでディレクトリを再帰的にリストする方法は?

  3. Dockerで依存する子イメージのリストを取得するには?

  1. Linuxでファイルとディレクトリを圧縮する方法(例付き)

  2. 末尾にスラッシュが付いたディレクトリをリストするためにLsを取得するにはどうすればよいですか?

  3. Linux で利用可能なワイヤレス ネットワークのリストを取得するにはどうすればよいですか?

  1. すべてのファイルとディレクトリを再帰的に一覧表示する方法

  2. CPU使用率を取得する方法

  3. psを印刷グループにするにはどうすればよいですか?