El otro día pensé en instalar algún juego para linux.
Lo malo que juegos libres no hay muchos y gráficamente no son muy bonitos. Por eso pensé en ver screenshots de juegos disponibles para debian, a ver si había alguno que llamara mi atención para instalarlo. Para automatizar el ver los screenshots de los paquetes seguí los siguientes pasos:
Primero se listan los paquetes en la sección games:
$ aptitude search -F %p '?section(games)'
0ad
0ad-data
0ad-data-common
...
Luego, según https://screenshots.debian.net/about, para obtener el screenshot de un paquete se debe utilizar la url http://screenshots.debian.net/screenshot/PACKAGENAME. Si el paquete posee una screenshot se devuelve un response http 200 y un archivo en formato png. En caso de que no se posea una screenshot se devuelve un response http 404.
Para descargar las imagenes en el directorio actual se utiliza un bucle con un here string de bash:
$ while read package; do
wget -O "$package.png" -c "http://screenshots.debian.net/screenshot/$package"
done <<< $(aptitude search -F %p '?section(games)')
Queda manejar el caso de los paquetes sin screenshots que devuelven 404
y
debido a ello wget
crea un archivo vacio.
Para eliminar los archivos vacíos se puede utilizar find
y xargs
:
$ find /tmp/screenshots -size 0 -print0 | xargs -0 rm
Finalmente se puede utilizar un visor de imagenes para ver las screenshots de los distintos juegos disponibles en debian.
A continuación el script completo:
#!/bin/bash
#
# Download in the current directory the screenshots for games in debian
# repository
#
set -e
while read package; do
wget --show-progress -q -O "$package.png" \
-c "http://screenshots.debian.net/screenshot/$package" || :
done <<< $(aptitude search -F %p '?section(games)')
find /tmp/screenshots -size 0 -print0 | xargs -0 rm
Cambios realizados en el script:
- Se mejora la salida de wget para que no sea tan verbosa pero muestre el
estado de la descarga de las imagenes utilizando
--show-progress -q
. - Cuando una url devuelve
404
wget devuelve un código de error8: Server issued an error response
, lo cual interrumpe el programa, por lo cual se utiliza|| :
que no hace nada cuando se obtiene un error dewget
.