GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir une liste de répertoires dans un zip ?

L'outil open-source Zip_Dir_List listera tous les répertoires pour vous, même pour les archives Zip qui n'ont pas d'entrées de répertoire explicites. À partir du lien, accédez au référentiel et suivez les instructions de construction dans readme.txt .


Pour lister uniquement les répertoires :

unzip -l foo.zip "*/"

Sortie (par exemple) :

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

ou utilisez

zipinfo -1 foo.zip "*/"

Sortie (par exemple) :

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/

Sur Cygwin

Je ne pouvais pas faire fonctionner l'un ou l'autre sur mon Cygwin. Pour mon utilisation immédiate, où je n'avais besoin que d'un répertoire en profondeur :

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

Pour les autres répertoires, vous pouvez utiliser xargs en combinaison avec une autre chose d'analyse, quelque chose comme :

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

Informations système

$ 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

$

Vous pouvez essayer le tuyau unzip -l à awk comme ceci :

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

Tous les répertoires du unzip -l la sortie se termine par une barre oblique et $NF imprime uniquement le chemin du répertoire.


Linux
  1. Comment puis-je obtenir une liste des réseaux sans fil disponibles sous Linux ?

  2. Comment obtenir l'utilisation du processeur

  3. Comment obtenir ps pour imprimer le groupe?

  4. Comment répertorier la taille du répertoire de tous les répertoires enfants ?

  5. comment obtenir des éléments de la liste en bash?

Comment compresser des fichiers et des répertoires sous Linux

Comment renommer des répertoires sous Linux

Comment obtenir la liste des comptes utilisateur MySQL sous Linux

Comment lister uniquement les répertoires sous Linux

Comment obtenir une liste de liens symboliques sous Linux

Comment créer un fichier zip ou des répertoires protégés par mot de passe sous Linux