Título: [Bash] Problemas con paréntesis y espacios en nombres de fichero [Solucionado]
Publicado por: Gallu en 17 Julio 2011, 16:15 pm
Hola a todos , estoy creando un script para renombrar ficheros, con nombres de ficheros normales ya funciona , pero cuando tengo nombres de fichero con espacios o paréntesis no va bien , alguna idea? El script: #!/bin/bash # #description : Renombra los ficheros del directorio actual y los deja en la carpeta de renombrados #autor = didacso carpetaNueva="renombrados" extension="jpg" AQUI=$( pwd ) RENOMBRADOS="$AQUI"/$carpetaNueva ELEMENTOS=0 mkdir "$RENOMBRADOS" for i in $( ls ); do NOW=$(date +"%m-%d-%y")-$(date +"%N") echo "$AQUI/$NOW.$extension" >> "$RENOMBRADOS/estadisticas.txt" echo "problema con " "$i" cp "$i" "$AQUI/$NOW.$extension" mv "$i" "$RENOMBRADOS/$i" let ELEMENTOS=ELEMENTOS+1 done gxmessage -center -title "Operación completada" $ELEMENTOS " elementos procesados" echo $ELEMENTOS " elementos procesados" >> "$RENOMBRADOS/estadisticas.txt"
la salida del comando es la siguiente cp: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio cp: no se puede efectuar `stat' sobre «(1)»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «(1)»: No existe el fichero o el directorio cp: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio cp: no se puede efectuar `stat' sobre «(10).jpg»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «(10).jpg»: No existe el fichero o el directorio cp: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio cp: no se puede efectuar `stat' sobre «(2)»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «(2)»: No existe el fichero o el directorio cp: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio cp: no se puede efectuar `stat' sobre «(4)»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «(4)»: No existe el fichero o el directorio cp: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «0g3nG3iJN4FaUzY0H4KvcdJZGFY»: No existe el fichero o el directorio cp: no se puede efectuar `stat' sobre «(5).jpg»: No existe el fichero o el directorio mv: no se puede efectuar `stat' sobre «(5).jpg»: No existe el fichero o el directorio
los nombres de los ficheros son los siguientes: 0g3nG3iJN4FaUzY0H4KvcdJZGFY (1) 0g3nG3iJN4FaUzY0H4KvcdJZGFY (2) 0g3nG3iJN4FaUzY0H4KvcdJZGFY (5).jpg 0g3nG3iJN4FaUzY0H4KvcdJZGFY (9).jpg 0g3nG3iJN4FaUzY0H4KvcdJZGFY (10).jpg 0g3nG3iJN4FaUzY0H4KvcdJZGFY (4) 0g3nG3iJN4FaUzY0H4KvcdJZGFY (8).jpg
no se si el problema es por el espacio o por el paréntesis
Título: Re: Problemas con paréntesis y espacios en nombres de fichero
Publicado por: leogtz en 17 Julio 2011, 18:41 pm
Prueba a extraer las carpetas y archivos conflictivos desde un archivo de texto, mira: #!/bin/bash ls -1 > cosas while read line do echo -e "Problema con : [$line]"; done < cosas rm -f cosas
Mira, yo tengo estos archivos con espacios: ┌─[0 leo@leo-945GCT-M ~/Escritorio]$ └─> ls -1 *.jpg 0g3nG3iJN4FaUzY0H4KvcdJZGFY (10).jpg 0g3nG3iJN4FaUzY0H4KvcdJZGFY (8).jpg ┌─[0 leo@leo-945GCT-M ~/Escritorio]$ └─>
Y corriendo el código: Problema con : [ 0g3nG3iJN4FaUzY0H4KvcdJZGFY (10).jpg ] Problema con : [ 0g3nG3iJN4FaUzY0H4KvcdJZGFY (8).jpg ] Problema con : [ alg.c ] Problema con : [ args.c ] Problema con : [ autos.bc ] Problema con : [ bdpass.kdb ] Problema con : [ code.c ] ... El script toma bien los nombres con espacios o paréntesis. Saludos.
Título: Re: Problemas con paréntesis y espacios en nombres de fichero
Publicado por: Gallu en 17 Julio 2011, 18:59 pm
Hola Leo , gracias por contestar, tu código funciona bien, pero estaba intentando hacerlo sin necesidad de un fichero , en mi código me había dado cuenta de que los nombres de fichero que contienen espacios los divide en dos , por ejemplo foto 1.jpg al hacer el ls i guardar el nombre del fichero en i , si hago un printf de i me pondría foto 1.jpg la verdad es que me gustaría arreglarlo para que me lo pille de esa manera, el problema esta en for i in $( ls -1 ); do
se te ocurre algo ?
Título: Re: Problemas con paréntesis y espacios en nombres de fichero
Publicado por: leogtz en 17 Julio 2011, 19:32 pm
#!/bin/bash ls -1 | while read archivo do echo -e "[$archivo]"; done
[0g3nG3iJN4FaUzY0H4KvcdJZGFY (10).jpg] [0g3nG3iJN4FaUzY0H4KvcdJZGFY (8).jpg] [alg.c] [args.c] ...
Título: Re: Problemas con paréntesis y espacios en nombres de fichero
Publicado por: Gallu en 17 Julio 2011, 19:56 pm
Perfecto , me ha funcionado a la perfección, muchas gracias , dejo el script completo por si alguien le sirve, este script debe ubicarse en la ruta de scripts de nautilus para que aparezca el menu contextual y pueda ser llamado dando al botón derecho dentro de cualquier directorio, creará una carpeta llamada renombrados donde dejará los archivos tal y como estaban antes de renombrarlos. /home/diego/.gnome2/nautilus-scripts
Se puede mejorar ... renombra.sh #!/bin/bash # #description : Renombra los ficheros del directorio actual y los deja en la carpeta de renombrados #autor = didacso for i in $( ls ); do carpetaNueva="renombrados" extension="jpg" AQUI=$( pwd ) RENOMBRADOS="$AQUI"/$carpetaNueva let ELEMENTOS=0 mkdir "$RENOMBRADOS" ls -1 | while read i ; do NOW=$(date +"%m-%d-%y")-$(date +"%N") echo "$AQUI/$NOW.$extension" >> "$RENOMBRADOS/estadisticas.txt" cp "$i" "$AQUI/$NOW.$extension" mv "$i" "$RENOMBRADOS/$i" let ELEMENTOS=ELEMENTOS+1 done gxmessage -center -title "Operación completada" $ELEMENTOS " elementos procesados" echo $ELEMENTOS " elementos procesados" >> "$RENOMBRADOS/estadisticas.txt"
|