Bash scripting: loops para automatizar trabajos cotidianos
Seguramente te has topado con algunas tareas que tengas que hacer de forma repetitiva. Por ejemplo, imagina que tienes un directorio lleno de archivos y deseas cambiar el nombre de todos ellos, o que necesitas comprimir varios ficheros o descomprimirlos, quizás necesites convertir de un formato a otro, copias de seguridad periódicas, etc. Para todo ello tienen soluciones los scripts.
Estas tareas cuando se aplican a un solo archivo en Bash están bien. El problema es cuando tienes que aplicarlo a decenas de ellos. La tarea puede ser muy molesta. Con un simple loop o bucle en Bash te podrías quitar ese problema y que se ejecute una tarea de forma reiterativa para automatizarla y que no te cueste tanto trabajo. La forma de hacerlo es super simple, pero muchos usuarios nuevos no lo hacen y terminan haciendo la tarea manualmente o buscando programas gráficos que lo hagan…
Para ello, quédate con esta estructura:
for x in objetivo; do comando; done
Por ejemplo, imagina que quieres eliminar ficheros llamados nombre0, nombre1, nombre2, nombre3, etc., hasta el número nombre100. Ir uno a uno con rm sería bastante tedioso, en cambio, puedes ejecutar la siguiente orden:
for n in 'seq 100'; do rm nombre$n; done
O tal ve imagina que tienes un directorio con varios ficheros .zip comprimidos que quieres extraer. Para no tener que ir uno a uno puedes usar:
</pre> <pre>for n in *.zip; do unzip "$n"; done
Puedes alterar estos loops de Bash como prefieras para usar la herramienta que necesitas en tu caso. Por ejemplo, otro más, ahora imagina que quieres desempaquetar un tarball:
</pre> <pre>for n in *.tar.xz; do tar -xf "$n"; done</pre> <pre>
Espero haberte ayudado a no perder tanto tiempo haciendo todas esas tareas de una en una y que puedas aplicar esto para agilizar tu trabajo cotidiano. Como ves, no tiene misterio, es super sencillo…