for z in *.zip; do if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?//p') < 15 )); then echo "$z"; fi; done
Isso lista os arquivos .zip
com menos de 15 arquivos para stdout (no terminal), portanto, se você quiser criar um arquivo de lista, poderá tee
out ou redirecionar. Aqui está mais legível, criando um arquivo de lista no final, assim como imprimindo no terminal
for z in *.zip; do
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?//p') < 15 )); then
echo "$z"
fi
done | tee small-zip-list
Notas
-
for z in *.zip
faz um loop sobre os arquivos que terminam com.zip
e faz algo para cada um, representado pela variávelz
referenciada com$z
-
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?//p') < 15 ))
faz o unzip contar os arquivos, extrai o número da saída (com certeza há uma maneira mais clara de extrair apenas o número, mas eu seised
, então eu usei - veja @muru's comment para um maneira mais simples que pode ser mais rápida com muitos arquivos) e testar se é menor que 15, e se é -
echo "$z"
, em seguida, imprima o nome do arquivo -
| tee small-zip-list
também imprime a saída para um novo arquivo, bem como no terminal