domingo, 6 de noviembre de 2016

Comprimir todos los ficheros de un directorio uno a uno en bash

¿Quién no tiene montones de archivos repartidos por el disco duro?, ¿quién no se cansa alguna vez y los intenta subir a algún servicio de almacenamiento en la nube? Llega el momento decisivo y se te ocurre que, para ahorrar espacio, quizás sea mejor subir los ficheros comprimidos en .zip. No todos los archivos en un único .zip, sino cada archivo en un .zip independiente.


Para conseguir que cada archivo se comprima de forma individual en un archivo .zip con el mismo nombre pero esa extensión se puede utilizar este comando en bash:

for i in *; do zip -r "${i%.*}.zip" "$i"; done

Básicamente, toma todos los archivos del directorio actual y hace un bucle con ellos ejecutando zip.
El modificador ${i%.*} hace que se elimine desde la última aparición del punto en el nombre del fichero hasta el final de la cadena en $i, consiguiendo así que la extensión del fichero no se pase al nombre del fichero zip correspondiente.

Como el bucle for recorre también el nombre de los subdirectorios, este comando comprime también su contenido, en un fichero zip de la carpeta actual.

No hay comentarios:

Publicar un comentario en la entrada