Bueno, me he puesto esta tarde en un momento de aburrimiento y he creado un nuevo engendro. La idea se me ocurrió porque muchas veces descargo archivos de música y vienen con caracteres extraños (por diferencias de codificación); por ejemplo, que ponga _20 en vez de un espacio, y cosas asÃ.
En el que pongo de ejemplo renombra los archivos que tienen _20, _28 y _29 y los sustituye por ' ' (espacio), '(' y ')', respectivamente (los números corresponden a los códigos hexadecimales en ASCII). Su uso es:
./nombre_del_script [<directorio destino>]
Aquà va el código:
GeSHi (bash):
#!/bin/bash
if [ $1 ] #Si hay argumentos, los comprobamos
then
if [ "$1" = "-h" ] #Si es -h, mostramos la ayuda y salimos
then
echo "Uso: $0 [<directorio>]"
exit
fi
ERROR=`cd $1 2>&1` #Comprobamos que el directorio exista
if [ "$ERROR" ]
then
echo "El directorio especificado no existe"
exit #Si no existe, salimos
fi
ACTUAL=`pwd` #Almacenamos el directorio de llamada
cd "$1"
fi
echo "Iniciando..."
for ORIG in * #Iteramos una vez por cada archivo - si se quieren revisar
#archivos ocultos sustituir * por `ls -A`
do
#La siguiente sentencia modela el cambio de nombres de archivo que queremos hacer - en mi caso sustituir caracteres
FIN=`echo "$ORIG" | sed 's/_20/ /g' | sed 's/_28/(/g' | sed 's/_29/)/g'`
#IMPORTANTE: no olvideis las comillas en las variables, porque
#si hay espacios las toma como varios valores a la vez a la hora
#de hacer el mv
if [ "$ORIG" != "$FIN" ] #Si hay cambio, renombramos
then
echo -n "Moviendo "$ORIG" a "$FIN"... "
mv "$ORIG" "$FIN"
echo OK
fi
done #for
if [ $1 ] #Volvemos al directorio original
then
cd $ACTUAL
fi
echo "Terminado."Created by GeSHI 1.0.7.20
Para shell bash.