for z in *.zip; do if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 )); then echo "$z"; fi; done
Esto enumera los .zip
archivos con menos de 15 archivos para stdout (en el terminal), por lo que si desea crear un archivo de lista, puede tee
salir o redirigir. Aquí es más legible, crear un archivo de lista al final e imprimir en el 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
Notas
for z in *.zip
recorrer los archivos que terminan con .zip
y hacer algo a cada uno, representado por la variable z
referenciada con$z
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 ))
haga que descomprimir cuente los archivos, extraiga el número de la salida (seguramente hay una forma más ordenada de extraer solo el número, pero sé que sed
lo he usado; vea el comentario de @ muru para una forma más simple que puede ser más rápida con muchos archivos) y compruebe si es inferior a 15 y si es
echo "$z"
luego imprima el nombre del archivo
| tee small-zip-list
También imprima la salida a un nuevo archivo, así como en el terminal
zipinfo
:zipinfo -1 foo.zip | wc -l
ozipinfo -t foo.zip | awk '{print $1}'
Una opción de python tardía, usando
python
'szipfile
, (como lo sugirió @muru, ¡gracias!)Cómo utilizar
get_zips.py
Ejecútelo con el directorio y el número deseado (mínimo) de archivos dentro, por ejemplo:
Explicación
La secuencia de comandos:
enumera
.zip
archivos dentro de un directorio:Mira dentro del archivo y cuenta la cantidad de archivos:
Solo imprime el archivo (+ ruta) si el número de elementos de la lista es menor
n
.fuente
Usando awk :
O también se puede hacer con script.
Crear script zip.sh
Guárdelo en la carpeta de inicio y hágalo ejecutable con
chmod +x zip.sh
y ejecute desde la terminal./zip.sh
Aquí,
if (( $(unzip -l $i | awk 'END {print $(NF-1)}') < 15 ))
,unzip -l $i
contará el número de archivos del archivo zip respectivo y de su salida,awk 'END {print $(NF-1)}'
grep ese número de recuento solamente, si es menor que 15, imprimirá el nombre del archivo.fuente
Perl también tiene un paquete para el manejo de archivos zip,
Archive::Zip
. El siguiente script toma archivos zip como argumentos de línea de comandos y proporciona una salida de línea de comandos con el nombre y el recuento de archivos dentro del archivo.Prueba de funcionamiento:
fuente
fuente
Obtenga el número total de archivos usando zipinfo:
fuente