La Ultima Esencia
Noticias:
 
*
Bienvenido(a), Visitante. Por favor, ingresa o regístrate. Diciembre 03, 2008, 06:54:09


Ingresar con nombre de usuario, contraseña y duración de la sesión


Páginas: [1]
  Imprimir  
Autor Tema: Script para cambiar nombres en masa  (Leído 334 veces)
0 Usuarios y 1 Visitante están viendo este tema.
mig
Moderador Global

Desconectado Desconectado

Mensajes: 631



WWW
« : Febrero 29, 2008, 19:37:23 »

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:
Código:
./nombre_del_script [<directorio destino>]

Aquí va el código:

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.
En línea

El problema que tenemos los informáticos es que hay demasiadas películas de ciencia ficción
pianista
Administrador

Desconectado Desconectado

Mensajes: 2614


« Respuesta #1 : Febrero 29, 2008, 22:24:56 »

Eres un tio grande Grin Grin
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  


Powered by SMF 1.1.6 | SMF © 2006-2007, Simple Machines LLC
Seo4Smf v0.2 © Webmaster's Talks


AFILIATE AQUI
Creative Commons License
Esta obra está bajo una licencia de Creative Commons.