Cortar/pegar archivos desde distintas carpetas sin teclado ni mouse en Linux

in #linux6 years ago (edited)

Después de un tiempo sin hacer un post, y tal como lo diría el título, hoy les traigo un script que surgió a partir de una "necesidad" particular:

Tenía que bajar un pack de roms de Sega Genesis (entre otras) y como suele pasar, tenemos una carpeta para cada juego, pero el hecho es que dentro de cada una hay entre 2 y 5 roms (una para cada zona) y no le veo mucho sentido tener repetido un mismo juego varias veces.


Un opción hubiese sido hacer con comando find y que mueva las roms a una misma carpeta -lo que no quería- o bien usar comandos con expresiones regulares encadenadas o entubadas (pero tenía fiaca de volver a repasar como eran algunos conceptos y los nombres de los juegos complicarían aún más las cosas) y claro, quedaba entrar carpeta por carpeta para hacer cut/paste de una rom de cada una, lo hubiese hecho si no tuviera más de 750 carpetas para hacer esa rutina.

Y pensando en lo último se me ocurrió usar una herramienta bastante buena llamada Xdotool, como lo que tenía que hacer era muy repetitivo este programa podía hacer lo suyo desde un script de Bash.
Xdotool se encarga de hacer tecleos, combinaciones de teclas, mover el puntero del mouse y hacer clicks de forma automática.

Primero anoté que teclas presionaba para marcar la carpeta, entrar, etc, tengamos en cuenta que yo usé Thunar (el gestor de archivos de Xfce) pero en los demás sería similar:

Luego vino hacer el script:

Aquí lo dejo para que lo copien si les hace falta:

#!/bin/bash  
CANTIDAD_DE_CARPETAS="158" 

sleep 5 
DELAY="0.5" 
clear 
for i in `seq 0 $CANTIDAD_DE_CARPETAS` 
do 
    sleep 2 
    xdotool key Down 
    sleep $DELAY 
    xdotool key Up 
    sleep $DELAY 
    xdotool key Return 
    sleep $DELAY 
    xdotool key Down 
    sleep $DELAY 
    xdotool key ctrl+x 
    sleep $DELAY 
    xdotool key alt+Up 
    sleep $DELAY 
    xdotool key ctrl+v 
    sleep $DELAY 
    xdotool key shift+Delete 
    sleep $DELAY 
    xdotool key space 

    echo "Carpeta $i de $CANTIDAD_DE_CARPETAS, esperando 2 segundos..." 
done 
  
exit 

Luego lo guardan con el nombre mover_roms.sh o cualquier otro que les guste, abren una consola y le dan los permisos de ejecución:

chmod +x mover_roms.sh

y lo ejecutan

./mover_roms.sh

Aquí lo tenemos en acción:

PD: Este post lo publiqué anteriormente en Taringa, sección Linux/GNU

Sort:  

@abelnicolas1976, I gave you a vote!
If you follow me, I will also follow you in return!
Enjoy some !popcorn courtesy of @nextgencrypto!

Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:
https://www.taringa.net/posts/linux/20231378/Cortar-pegar-archivos-de-distintas-carpetas-sin-tocar-el-tec.html