Como você já tem o comando de extração sh -c 'unzip -d "${1%.*}" ""' , é possível usar xargs para converter arquivos de entrada em argumentos:
xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" ""' _
O {} não é necessário, pois xargs , por padrão, acrescenta a entrada à lista de argumentos. O -L1 faz com que ele use uma linha de entrada como argumento.
Em seguida, basta redirecionar a saída para um arquivo:
xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" ""' _ &> zip.log
Ou apenas os erros:
xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" ""' _ 2> zip.log