for z in *.zip; do if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 )); then echo "$z"; fi; done
Cela répertorie les .zip
fichiers avec moins de 15 fichiers à stdout (dans le terminal), donc si vous souhaitez créer un fichier de liste, vous pouvez le tee
retirer ou le rediriger. Ici, c'est plus lisible, la création d'un fichier de liste à la fin ainsi que l'impression dans le terminal
for z in *.zip; do
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 )); then
echo "$z"
fi
done | tee small-zip-list
Remarques
for z in *.zip
faire une boucle sur les fichiers se terminant par .zip
et faire quelque chose pour chacun, représenté par la variable z
référencée par$z
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 ))
faire décompresser les fichiers, extraire le nombre de la sortie (il y a sûrement un moyen plus ordonné d'extraire uniquement le nombre, mais je sais sed
que je l'ai utilisé - voir le commentaire de @ muru pour un moyen plus simple qui peut être plus rapide avec de nombreux fichiers) et tester si elle est inférieure à 15, et si elle est
echo "$z"
puis imprimez le nom du fichier
| tee small-zip-list
également imprimer la sortie dans un nouveau fichier, ainsi que dans le terminal
zipinfo
:zipinfo -1 foo.zip | wc -l
ouzipinfo -t foo.zip | awk '{print $1}'
Une option python tardive, utilisant
python
'szipfile
, (comme suggéré par @muru, merci!)Comment utiliser
get_zips.py
Exécutez-le avec le répertoire et le nombre de fichiers (minimum) souhaité à l'intérieur, par exemple:
Explication
Le scénario:
répertorie les
.zip
fichiers dans un répertoire:Regarde à l'intérieur du fichier et compte le nombre de fichiers:
N'imprime le fichier (+ chemin d'accès) que si le nombre d'éléments répertoriés est plus petit
n
.la source
Utiliser awk :
Ou cela peut aussi être fait avec un script.
Créer un script zip.sh
Enregistrez-le dans le dossier d'accueil et rendez-le exécutable avec
chmod +x zip.sh
et exécutez à partir du terminal./zip.sh
Ici,
if (( $(unzip -l $i | awk 'END {print $(NF-1)}') < 15 ))
,unzip -l $i
il comptera le nombre de fichiers du fichier zip respectif et de sa sortie,awk 'END {print $(NF-1)}'
grep ce nombre de comptage uniquement, s'il est inférieur à 15, il affichera le nom du fichier.la source
Perl dispose également d' un package pour le traitement des archives zip,
Archive::Zip
. Le script ci-dessous prend les fichiers zip comme arguments de ligne de commande et fournit une sortie de ligne de commande avec le nom et le nombre de fichiers dans l'archive.Essai:
la source
la source
Obtenez le nombre total de fichiers en utilisant zipinfo:
la source