web-dev-qa-db-fra.com

Comment lister le contenu de tous les fichiers .Zip dans un dossier et grep pour un fichier spécifique?

J'ai 348 fichiers Zip et je souhaite trouver un fichier qui se trouve dans l'un des fichiers Zip. unzip -l ne fonctionne pas avec les caractères génériques?

Comment puis-je lister le contenu de tous les fichiers .Zip et grep dans la liste fusionnée de tous les fichiers contenus dans les zips?

27

Utiliser zipinfo est une bonne solution ici. Cependant, en règle générale, chaque fois que vous souhaitez appliquer une commande à une liste de fichiers et que cette commande n’accepte pas une liste de fichiers, vous pouvez utiliser une boucle for:

for file in *.Zip; do
    unzip -l "$file"
done \
| grep "\.Zip\|setup"

Si le fichier que vous recherchez contient des espaces tels que: your file, dans l'expression régulière grep, vous devez échapper à chaque espace avec une barre oblique inversée telle que grep "\.Zip\|your\ file".

16
Konrad Rudolph

Vous pouvez utiliser zipinfoname__. Il est inclus dans l'installation par défaut d'Ubuntu. Consultez le page de manuel pour plus d'informations.

Par exemple, pour rechercher un motif setupdans un groupe de fichiers Zip du répertoire en cours, utilisez la commande suivante:

find ./ -iname *Zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup
12
Anwar

Pour lister les fichiers dans une archive Zip, vous pouvez utiliser la commande suivante.

unzip -l

Pour grep une archive compressée, vous devez utiliser les utilitaires d'archive compressés conçus pour fonctionner avec ce type de format d'archive.

Pour les archives Zip:

zipgrep --help  
usage: zipgrep [egrep_options] pattern zipfile [members...]
Uses unzip and egrep to search the Zip members for a string or pattern.

Pour les archives tar:

zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

OPTIONs are the same as for 'grep'.

Quelques autres outils fonctionnent également avec les archives. Vous pouvez canaliser le résultat dans grep pour faire la même chose.

zcat
zcat my.archive.Zip | grep "some text"

Ou vous pouvez utiliser la fonctionnalité de recherche de ces outils

zless
zmore
6
nelaaro