Scrip en cosola que cree carpetas segun nombre archivo

Tengo un scrip que me mueve la series a la carpeta de la serie, pero estoy intentando hacer uno que me cree las carpetas de las temporadas si hay algun archivo de esa temporada, es decir algo como esto escrito en algo parecido a java pero en consola si es posible
int tmp = 1;
  if (tmp < 20){
   if exist T+tmp;
    else if exist{
        "*"+tmp"x[0-99];
       mkdir T+tmp;
      }
tmp+1;
}
JdR escribió:Tengo un scrip que me mueve la series a la carpeta de la serie, pero estoy intentando hacer uno que me cree las carpetas de las temporadas si hay algun archivo de esa temporada, es decir algo como esto escrito en algo parecido a java pero en consola si es posible
int tmp = 1;
if (tmp < 20){
if exist T+tmp;
else if exist{
"*"+tmp"x[0-99];
mkdir T+tmp;
}
tmp+1;
}

Como sabes de que serie/temporada es cada archivo? por el nombre? Ej : Tralara 1X19.avi
Ejecuto un script que ordena primera:

Para smallvile por ejemplo:

find . -iname "Smallville*" -type f -exec mv -v {} "/media/datos/Multimedia/Series/Smallville" \;

Y se queda todo en el directorio smallvile sin ordenar,
Depende un poco de cuál sea el formato de los nombres. Yo he supuesto que el número de la temporada está al final del nombre, justo antes de la extensión. Si no es así, habría que cambiar la variable pattern que contiene la expresión regular:

#!/bin/sh

pattern=".*[^0-9]([0-9]+)\.[^.]+"

for f in *; do
   temp=`echo "$f" | sed -nr "s:$pattern:\1:p"`
   [ "$temp" ] || continue
   dir=Temporada$temp
   mkdir -p $dir
   mv "$f" $dir
done


El script es lo más básico que se despacha: hay que ejecutarlo en el directorio en el que están las series y cuando hay un fichero que no se ajusta al patrón, no hace nada con él.

Por cierto, el sed usa una extensión GNU. Se podría cambiar para que no lo hiciese, pero si usas linux es el que vas a tener instalado.
Gracias, no conocia sed, la cosa se ha quedado asi

#!/bin/sh

pattern=".*([0-9])x([0-9]+).*"

for f in *; do
   temp=`echo "$f" | sed -nr "s:$pattern:\1:p"`
   [ "$temp" ] || continue
   dir="Temporada $temp"
   mkdir -p "$dir"
   mv "$f" "$dir"
done


Gracias
4 respuestas