Sim, você pode usar nullglob
no bash:
$ shopt -s nullglob
$ tee foo.zip bar.zip </dev/null
$ echo *.zip *.jar
bar.zip foo.zip
A opção nullglob
altera o comportamento de um glob não-correspondente de se tornar uma string literal para ser removido completamente.
No entanto, isso provavelmente não será suficiente em seu caso de uso específico, já que unzip
não saberá o que fazer se não for passado nenhum argumento. Você deve verificar se há zips / jars para descompactar primeiro, assim:
shopt -s nullglob
zips=( *.zip )
jars=( *.jar )
(( "${#zips[@]}" )) && unzip -q "${zips[@]}"
(( "${#jars[@]}" )) && unzip -q "${jars[@]}"
Ou de uma só vez (se aplicável):
shopt -s nullglob
zipsandjars=( *.zip *.jar )
(( "${#zipsandjars[@]}" )) && unzip -q "${zipsandjars[@]}"
No shell POSIX, algo semelhante também pode ser feito da seguinte forma:
for file in *.zip *.jar; do
if [ "$file" != "*.zip" ] && [ "$file" != "*.jar" ]; then
unzip -q "$file"
fi
done