Hola yo soy Miguel, y en este tutorial te llevaré paso a paso para crear dos shell scripts que te ayudaran a recopilar todas las fotos almacenadas en linux. El primer shell script copiará las imágenes en un nuevo directorio, y el segundo shell script comprimirá la carpeta junto con las imágenes.
.
Necesitas:
.
Necesitamos crear dos archivos con la extension sh, para eso ejecutamos:
touch cpimg.sh tarimg.sh
.
Ahora debemos otorgar permisos de ejecución a ambos archivos. A mi preferencia únicamente mi usuario tendrá tal permiso, y para lograrlo ejecutamos el siguiente comando:
chmod 766 cpimg.sh tarimg.sh
.
.
Eres libre de usar tu editor de texto o código preferido, en mi caso yo usé nvim. Para ejecutar nvim en el archivo ejecutamos:
nvim cpimg.sh
.
Una vez nos encontremos editando el archivo es importante permitir a la terminal conocer que el archivo es un binario, por lo que debemos añadir la siguiente línea de código al comienzo del archivo:
#!/bin/bash
.
Es importante que nuestros scripts impriman mensajes conforme se van ejecutando los comandos, por lo que iniciaremos mostrando un mensaje que indique el inicio de ejecución del script:
echo"Inicio de búsqueda y copia de imágenes..." &&
.
Creamos un directorio para guardar las imágenes una vez sean localizadas, y también un mensaje indicando la creación del directorio:
mkdir -p my-images &&
echo "Directorio my-images creado" &&
.
Ahora iniciaremos la búsqueda de las imágenes con el comando find. Yo únicamente he indicado buscar imágenes con las siguientes extensiones:
.
Entonces añadimos el siguiente comando a nuestro script, junto con un mensaje de inicio y de finalización de la búsqueda y copia de imágenes con find y exec de parámetro:
echo "Buscando y copiando imágenes a directorio creado..." &&
find $(pwd) -type f \( -name"*.png" -o -name"*.jpg" -o -name"*.jpeg" -o -name"*.svg" -o -name"*.raw" -o -name"*.gif" -o -name"*.heif" -o -name"*.mbp" -o -name"*.tiff" -o -name"*.psd" \) -exec cp {} ./my-images/ \; &&
echo "Imágenes guardadas en el directorio"
.
En el comando find
, donde se indica a partir de que ruta ejecutar el comando he usado $(pwd)
, lo que permite que su ejecución sea flexible. Cuando llames a la ejecución del script entonces tomará en cuenta la ruta en la que te encuentras posicionado en el momento de la ejecución y comenzará la búsqueda de las imágenes a partir de ese directorio. Además recuerda que la búsqueda es recursiva, lo que significa que buscará los archivos también dentro de subdirectorios y en subdirectorios dentro de estos.
.
Finalmente agregamos un mensaje de finalización de nuestro shell script:
echo"Copia de imágenes finalizada"
.
Guardamos y salimos de nvim o vim presionando la tecla ESC y escribiendo :wq
o también :x
.
Listo, eso ha sido todo por parte de la recopilación y copia de imágenes a nuestro directorio creado. Ahora pasaremos a la creación de nuestro segundo shell script que además de realizar lo mismo que nuestro archivo cpimg.sh también comprimirá la carpeta junto con las imágenes como su contenido.
.
.
.
.
Reutilizaremos el código de cpimg.sh, por lo que podemos fácilmente copiar y pegar todo su contenido en tarimg.sh. No te preocupes, yo te ahorraré ese paso, aquí tienes mi código de cpimg.sh, tiene comentarios que no añadí al tutorial. Copia y pega en el archivo tarimg.sh:
#!/bin/bash
#Mensaje de inicioecho"Inicio de búsqueda y copia de imágenes..." &&
#Creamos directorio para almacenar la copia de imágenesecho"Creando directorio para guardar imágenes..." &&
mkdir -p my-images &&
echo"Directorio my-images creado" &&
#Iniciamos búsqueda de imágenes y copiamos a la ruta actualecho"Buscando y copiando imágenes a directorio creado..." &&
find $(pwd) -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" -o -name "*.svg" -o -name "*.raw" -o -name "*.gif" -o -name "*.heif" -o -name "*.mbp" -o -name "*.tiff" -o -name "*.psd" \) -exec cp {} ./my-images/ \; &&
echo"Imágenes guardadas en directorio"#Mensaje de finalizaciónecho"Copia de imágenes finalizada"
.
Muy bien, ahora removemos el último comando echo
que indica la finalización de copia de imágenes:
#Mensaje de finalizaciónecho"Copia de imágenes finalizada"
.
Indicaremos la compresión del directorio y sus imágenes con el siguiente comando:
echo "Comprimiendo imágenes" &&
tar -czvf my-images.tar.gz ./my-images &&
echo "Se comprimió el directorio exitosamente" &&
.
Por último eliminamos el directorio y su contenido. Si deseas conservar la carpeta y su versión comprimida a la vez entonces ignora este paso.
.
Para eliminar el directorio y su contenido usamos el siguiente comando junto con otro mensaje que indique su ejecución:
echo"Removiendo directorio con imágenes" &&
rm -r $(pwd)/my-images &&
.
Por último agregamos el mensaje de finalización del script tarimg.sh:
echo"Compresión finalizada exitosamente"
.
Por último eliminamos el directorio y su contenido. Si deseas conservar la carpeta y su versión comprimida a la vez entonces ignora este paso.
.
Para eliminar el directorio y su contenido usamos el siguiente comando junto con otro mensaje que indique su ejecución:
echo"Removiendo directorio con imágenes" &&
rm -r $(pwd)/my-images &&
.
Por último agregamos el mensaje de finalización del script tarimg.sh, y guardamos los cambios en el archivo:
echo"Compresión finalizada exitosamente"
.
Puedes descomprimir el archivo con el comando:
tar -xzvf my-images.tar.gz
.
…-…-…-…-…-…-…-…
.
Lo último que haremos será agregar estos archivos a nuestra ruta de binarios, esto nos permitirá ejecutar los archivos como comandos en casi cualquier ruta.
.
Si utilizas bash deberás registrar los binarios en el archivo .bashrc o en el caso de zsh será en .zshrc, estos archivos los encuentras en tu directorio $HOME, para moverte a ese directorio ejecuta cualquiera de los siguientes comandos:
cd $HOME
o simplemente:
cd
.
Una vez encontrandote posicionado en el directorio home, podrás visualizar el directorio oculto source de tu shell listado con el siguiente comando:
ls -la
.
Habiendo confirmado la existencia de .bashrc o .zshrc debemos editarlo.
.
Aquí tienes dos opciones para llamar a los scripts a ejecutarse en la terminal:
a) Puedes crear un alias.
b) Agregar la ruta al $PATH de binarios.
.
.
A) Crear Alias
.
Al final del archivo añade la siguiente línea:
aliascpimg="/home/tu-usuario/ruta-de-tus-shell-scripts/cpimg.sh"aliastarimg="/home/tu-usuario/ruta-de-tus-shell-scripts/tarimg.sh"
✳️ Puedes renombrar el nombre de los alias a tu gusto.
✴️ Si quieres obtener la ruta de tus shell scripts puedes abrir otra terminal, luego posicionate en el directorio de tus shell scrips y ejecuta el comando: pwd
, copia la ruta y utilizala en la creación de tus alias.
.
Ahora debes guardar los cambios en el archivo, y finalmente reinicia la terminal. Puedes simplemente cerrar y volver a abrir la terminal. También puedes ejecutar bash
o source bash
en el caso de tener bash, o si tienes zsh ejecuta zsh
o source zsh
.
.
.
B) Agregar la ruta al $PATH de binarios
.
Al final del archivo que carga tu shell agrega la siguiente línea:
PATH=$PATH:/home/tu-usuario/ruta-de-tus-shell-scripts
✴️Después de los dos puntos agrega la ruta de tus scripts, dicha ruta recuerda que la puedes obtener ejecutando el comando pwd
en el directorio de los scripts.
.
Guarda los cambios y reinicia tu shell.
.
🟣Si agregaste los scripts mediante aliases entonces solo necesitas ejecutar el nombre del alias para que se ejecute el script que desees.
.
🟡Si agregaste los scripts a la ruta de binarios deberás llamarles junto con su extensión .sh, por ejemplo tarimg.sh o cpimg.sh
.
.
.
…-…-…-…-…-…-…-…
Si necesitas ayuda puedes apoyarte con mis shell scripts, los cuales he subido a un repositorio en Github, puedes acceder al repositorio dando click al siguiente enlace:
¡Envía tu pull request!
Me haría muy feliz enriquecer el repositorio juntos.
.
🎉Muchas gracias por haber llegado hasta el final.
📝 Nunca pares de aprender.