Como hariais este script

Tengo una serie de Temporadas de TV organizadas en carpetas, poer ahora me he deado cuenta de que hay 4 temporadas de una serie en cocnfreto que , en su interior cada capitulo esta a su vez en una Subcarpeta.

lo que quiero es evitar tener que ir con nautilus Copiando/Cortando/Pegando por lo que he pensado en un script que mirara en el interior de cada subcarpeta, moviera todos los archivos a la carpeta "padre" y eliminara la carpeta

No se si me explico.

O sea así es como está ahora:

Los Simpsons -> Temporada1-> Varias Subcarpetas con un solo capitulo en cada subcarpeta

Así como me gustaria que se quedara una vez ejecutara el script pasando el nombre de la carpeta "padre" como parametro (EN este caso el parametro sería "Los Simpsons")

Los Simpsons -> Temporada1->Todos los capitulos sin subcarpetas
¿Y no es mas fácil ir cortando y pegando en cada carpeta? No serán taaaantos capítulos digo yo. Aunque si son los Simpson si te puedes morir si... xD
Te pones dentro de la carpeta Los Simpsons y escribes cp Temporada1/*/*.avi Temporada1/

Luego compruebas que se hayan copiado bien y si es así seleccionas todos los directorios y los eliminas.

PD: el *.avi es asumiendo que sean avi, si tienen otra extensión pues la que sea, y si sólo tienes ficheros de video como si ni pones la extensión.
Pues básicamente sería algo así:
for i in */*; do
   mv "$i" .
   rmdir "${i%/*}"
done


Eso tendrías que ejecutarlo en el directorio donde están todos los directorios que contienen los capítulos. L

Otra opción sería mover todos los ficheros primero y después borrar todos los directorios, que estarán ya vacíos, mediante rmdir.

Y seguro que hay cien opciones mejores, no soy muy bueno con bash ^^ Tampoco hace falta un script para esto, lo puedes poner a mano, es cortito.
A colación de lo que dice amuchamu que es correcto, decir que yo siempre que manipulo archivos prefiero copiar y luego borrar y no mover directamente, así te evitas posibles sustos, yo tuve que sufrir alguno en el pasado.
Baek escribió:A colación de lo que dice amuchamu que es correcto, decir que yo siempre que manipulo archivos prefiero copiar y luego borrar y no mover directamente, así te evitas posibles sustos, yo tuve que sufrir alguno en el pasado.


Sí, yo también. De hecho suelo hacer una copia de todo lo que va a pasar por un script mío, que tengo una tendencia curiosa a borrar cosas importantes.
amuchamu escribió:Pues básicamente sería algo así:
for i in */*; do
   mv "$i" .
   rmdir "${i%/*}"
done


Eso tendrías que ejecutarlo en el directorio donde están todos los directorios que contienen los capítulos. L

Otra opción sería mover todos los ficheros primero y después borrar todos los directorios, que estarán ya vacíos, mediante rmdir.

Y seguro que hay cien opciones mejores, no soy muy bueno con bash ^^ Tampoco hace falta un script para esto, lo puedes poner a mano, es cortito.


Mmmm.......voy a probar.
A ver, está claro que deben haber miles de formas diferentes, peor a veces te quedas encallado en la cosa mas tonta, y no se me ocurría como podia solucionarlo.

Creo que la opcion de amuchamu me sirve perfectamente, aunque antes haré una copia por si acaso

EDIT:

Pues no funciona.
No copia ningun archivo a la carpeta "padre" desde la que lo ejecuto, y da un error de que no puede borrar las subcarpetas por no estar vacias
A ver yo

Desde la carpeta padre ejecuta esto

mv $(find * -type f) ./ && rmdir *


copiando antes

cp $(find * -type f) ./


compruebas los archivos, y luego borras las carpetas con

rm -r $(find * -type d)


---------

no me gusta nada usar rm -r así, pero debe funcionar (ejecuta antes el find si no te fías, a ver qué es lo que te sale)

esto lo he probado en zsh, pero que yo sepa es totalmente compatible con bash
7 respuestas