GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan daftar direktori dalam zip?

Alat Zip_Dir_List sumber terbuka akan mencantumkan semua direktori untuk Anda, bahkan untuk arsip Zip yang tidak memiliki entri direktori eksplisit. Dari link tersebut, buka repositori dan ikuti petunjuk build di readme.txt .


Untuk mendaftar direktori saja:

unzip -l foo.zip "*/"

Keluaran (mis.):

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

atau gunakan

zipinfo -1 foo.zip "*/"

Keluaran (mis.):

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/

Di Cygwin

Saya tidak dapat membuat salah satu dari ini bekerja pada Cygwin saya. Untuk penggunaan langsung saya, di mana saya hanya perlu mendalami satu direktori:

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

Untuk direktori lain, Anda dapat menggunakan xargs dalam kombinasi dengan beberapa hal penguraian lainnya, seperti:

## 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

Info Sistem

$ 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

$

Anda dapat mencoba menyalurkan unzip -l ke awk seperti ini:

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

Semua direktori di unzip -l keluaran diakhiri dengan garis miring dan $NF mencetak hanya jalur direktori.


Linux
  1. Bagaimana Mendapatkan Ls Untuk Mencantumkan Direktori Dengan Trailing Forward-slash?

  2. Bagaimana saya bisa mendapatkan daftar jaringan nirkabel yang tersedia di Linux?

  3. Cara mendaftar semua file dan direktori secara rekursif

  1. Bagaimana cara mendaftar direktori secara rekursif di C di Linux?

  2. Bagaimana cara mendapatkan ps untuk mencetak grup?

  3. Bagaimana cara membuat daftar ukuran direktori dari semua direktori anak?

  1. Cara Zip File dan Direktori di Linux (dengan Contoh)

  2. Cara Mengarsipkan File Dan Direktori Di Linux [Bagian 2]

  3. bagaimana cara mendapatkan elemen dari daftar di bash?