Re: Renombrar recursivamente
Perdón, no me dí cuenta de que además de enviarmelo por privado habias mandado a la lista. Por cierto, como leo la lista, no es necesario enviar privados simultaneamente (así lo que se consigue es que lo reciba duplicada y me dé más coraje B-( El jue, 04 de mar de 2004, a las 12:15:43 +0100, Salva. dijo: > Bueno, la cuestión era como renombrar recursivamente dentro de carpetas > ficheros tipo X.met.bak a X.met, donde X suele ser un numero. > find -name '*bak' | rename 's/.bak$//' > Tu técnica parece la más sencilla, pero ¿cómo haces para quitar parte de > la extensión o del nombre? > > Oye, gracias a todos por las respuestas y pido disculpas porque no creo > que esto esté relacionado con Debian para nada. Por cierto, ¿Sabéis de > alguna lista donde se puedan hacer este tipo de preguntas? > Las news de ecol: es.comp.os.linux.misc es.comp.os.linux.programacion es.comp.os.linux.instalacion ... -- Javier Maria Mora Merchan (GPGP) Key ID: 0x794F3D83
Re: Renombrar recursivamente
El mié, 03-03-2004 a las 17:06, Salva escribió: > Este no me ha funcionado !! el error es el siguiente > >File "./renombra.py", line 10 > os.system("cd "+str(directorio)+" && mv "+str(l)+" > ^ > SyntaxError: invalid token ¿Has puesto la línea completa? Es ésta: os.system("cd "+str(directorio)+" && mv "+str(l)+" "+str(l)+".bak") Yo lo he probado y funciona. -- /|\ Israel Herraiz <[EMAIL PROTECTED]> /_|_\ Fingerprint: 1D08 6AB1 709D 37A2 0CFD \ | / _ 9733 CEE4 0EA0 6248 BA12 \|/ ( ) _._ '.U .'_|_'. '. '. |(o_ (o_ (o_ {o_ (o_//\_.___ //| //\ (')_ (\)_ V_/_'oo' V_|_ V__)_ signature.asc Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente
Re: Renombrar recursivamente
Bueno, la cuestión era como renombrar recursivamente dentro de carpetas ficheros tipo X.met.bak a X.met, donde X suele ser un numero. Tu técnica parece la más sencilla, pero ¿cómo haces para quitar parte de la extensión o del nombre? Oye, gracias a todos por las respuestas y pido disculpas porque no creo que esto esté relacionado con Debian para nada. Por cierto, ¿Sabéis de alguna lista donde se puedan hacer este tipo de preguntas? Salva Javier M Mora escribió: Los siento pero he llegado tarde al hilo y me he perdido el principio. Cuando yo quiero renombrar (o incluso mover) ficheros por varios directorios utilizo la siguiente secuencia: find [...]* | rename [...]** donde: [...]* es la regla que determina los ficheros a renombrar [...]** es la regla que indica el tipo de cambio de nombre a realizar. Así para añadir pepe a una colección de fotos: find -name '*jpg' | rename '$_="pepe".$_' para cambiar de MP3 a mp3 en las terminaciones: find -name '*MP3' | rename 's/MP3$/mp3/' etc.
Re: Renombrar recursivamente
Joder, y eso que lo había leído, no tengo perdón. Gracias miguel, así funciona a la perfección !! Bueno, gracias a todos. Salva Miguel Rodríguez Penabad escribió: On Wednesday 03 March 2004 17:34, Salva wrote: Creo que no le sientan bien los espacios... podría tener solución ... Has probado poniendo las comillas dobles alrededor de $j, como indicaba aquí? Eso debería solucionar el problema de los espacios. mv "${j}" "`echo ${j} | sed 's/met.bak$/met/g'`" Saludos Miguel
Re: Renombrar recursivamente
Los siento pero he llegado tarde al hilo y me he perdido el principio. Cuando yo quiero renombrar (o incluso mover) ficheros por varios directorios utilizo la siguiente secuencia: find [...]* | rename [...]** donde: [...]* es la regla que determina los ficheros a renombrar [...]** es la regla que indica el tipo de cambio de nombre a realizar. Así para añadir pepe a una colección de fotos: find -name '*jpg' | rename '$_="pepe".$_' para cambiar de MP3 a mp3 en las terminaciones: find -name '*MP3' | rename 's/MP3$/mp3/' etc. -- Javier Maria Mora Merchan (GPGP) Key ID: 0x794F3D83
Re: Renombrar recursivamente
On Wednesday 03 March 2004 17:34, Salva wrote: > Creo que no le sientan bien los espacios... podría tener solución > ... Has probado poniendo las comillas dobles alrededor de $j, como indicaba aquí? Eso debería solucionar el problema de los espacios. > > mv "${j}" "`echo ${j} | sed 's/met.bak$/met/g'`" Saludos Miguel -- Miguel Rodriguez Penabad[EMAIL PROTECTED] Laboratorio de Bases de Datos http://emilia.dc.fi.udc.es/labBD Despacho 0.01 Tel. 981 167000 ext. 1333 Facultade de InformáticaUniversidade da Coruña (Spain)
Re: Renombrar recursivamente
Creo que no le sientan bien los espacios... podría tener solución ls: temp/Desmontando/*.met.bak: No existe el fichero o el directorio ls: a/*.met.bak: No existe el fichero o el directorio ls: Harry/*.met.bak: No existe el fichero o el directorio ls: [Woody/*.met.bak: No existe el fichero o el directorio ls: Allen]/*.met.bak: No existe el fichero o el directorio ls: Dual/*.met.bak: No existe el fichero o el directorio ls: Spanish/*.met.bak: No existe el fichero o el directorio ls: English/*.met.bak: No existe el fichero o el directorio ls: [x/*.met.bak: No existe el fichero o el directorio Gracias de todas formas ! [EMAIL PROTECTED] escribió: Buena observacion Miguel, corrijo mi shell por esta otra: for i in `find /tmp/pedro -type d` do for j in `ls -1 ${i}/*.met.bak` do mv ${j} `echo ${j} | awk -F'.met.' '{printf $1".met";}'` done done Esto solo dara problemas si el propio nombre del fichero contien ".met.", lo cual ya es bastante mas dificil que ocurra. Gracias por la correccion. Saludos y gracias. Miguel Rodríguez Penabad Para: debian-user-spanish@lists.debian.org <[EMAIL PROTECTED]> cc: Asunto: Re: Renombrar recursivamente 27/02/2004 11:43 On Friday 27 February 2004 10:38, [EMAIL PROTECTED] wrote: Hola Salva, hazte un shell, del tipo: for i in `find X -type d` do for j in `ls -1 ${i}/*.met.bak` do mv ${j} `echo ${j} | awk -F'.' '{printf $1"."$2;}'` done done Esto te renombra de forma automatica y recursiva como tu quieres, comenzando en el directorio X que tu le indiques. Este sistema puede dar problemas si hay nombres con puntos, como directorio.primero/fichero.que.quieres.cambiar.met.bak, o si hay espacios en los nombres (no sé exactamente como nombra los ficheros y directorios overnet) yo haría mv "${j}" "`echo ${j} | sed 's/met.bak$/met/g'`" -- Miguel Rodriguez Penabad [EMAIL PROTECTED] Laboratorio de Bases de Datos http://emilia.dc.fi.udc.es/labBD Despacho 0.01Tel. 981 167000 ext. 1333 Facultade de Informática Universidade da Coruña (Spain) -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: Renombrar recursivamente
Este no me ha funcionado !! el error es el siguiente File "./renombra.py", line 10 os.system("cd "+str(directorio)+" && mv "+str(l)+" ^ SyntaxError: invalid token Gracias de todas formas Israel Herraiz Tabernero escribió: El jue, 26-02-2004 a las 21:01, Salva. escribió: ¿Sabéis si hay algún programa que renombre recursivamente dentro de los directorios? Python es tu amigo: #!/usr/bin/env python import os def renombraDir(directorio): lista_met = [x for x in os.listdir(directorio) if x.find(".met") is not -1 and not os.path.isdir(x)] i = 0 for l in lista_met: print "Moviendo "+str(l)+" a "+str(l)+".bak" os.system("cd "+str(directorio)+" && mv "+str(l)+" "+str(l)+".bak") i = i + 1 print "***" print str(i)+" archivos renombrados en el directorio "+str(directorio) print "***" def recorreDirectorios(directorio_padre): lista_dir = [x for x in os.listdir(directorio_padre) if os.path.isdir(x)] for l in lista_dir: renombraDir(l) if __name__ == "__main__": recorreDirectorios(".") # Fin de programa Copia y pega el programa en un archivo, por ejemplo renombra_met.py, después dale permisos de ejecución (chmod a+x renombra_met.py), y ejecútalo en el directorio que quieras: cp renombra_met.py directorio cd directorio ./renombra_met.py Por cierto, de nada ;-)
Re: Renombrar recursivamente
Buena observacion Miguel, corrijo mi shell por esta otra: for i in `find /tmp/pedro -type d` do for j in `ls -1 ${i}/*.met.bak` do mv ${j} `echo ${j} | awk -F'.met.' '{printf $1".met";}'` done done Esto solo dara problemas si el propio nombre del fichero contien ".met.", lo cual ya es bastante mas dificil que ocurra. Gracias por la correccion. Saludos y gracias. Miguel Rodríguez Penabad Para: debian-user-spanish@lists.debian.org <[EMAIL PROTECTED]> cc: Asunto: Re: Renombrar recursivamente 27/02/2004 11:43 On Friday 27 February 2004 10:38, [EMAIL PROTECTED] wrote: > Hola Salva, hazte un shell, del tipo: > > for i in `find X -type d` > do > for j in `ls -1 ${i}/*.met.bak` > do > mv ${j} `echo ${j} | awk -F'.' '{printf $1"."$2;}'` > done > done > > > Esto te renombra de forma automatica y recursiva como tu quieres, > comenzando en el directorio X que tu le indiques. Este sistema puede dar problemas si hay nombres con puntos, como directorio.primero/fichero.que.quieres.cambiar.met.bak, o si hay espacios en los nombres (no sé exactamente como nombra los ficheros y directorios overnet) yo haría mv "${j}" "`echo ${j} | sed 's/met.bak$/met/g'`" -- Miguel Rodriguez Penabad [EMAIL PROTECTED] Laboratorio de Bases de Datos http://emilia.dc.fi.udc.es/labBD Despacho 0.01Tel. 981 167000 ext. 1333 Facultade de Informática Universidade da Coruña (Spain) -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: Renombrar recursivamente
On Friday 27 February 2004 10:38, [EMAIL PROTECTED] wrote: > Hola Salva, hazte un shell, del tipo: > > for i in `find X -type d` > do > for j in `ls -1 ${i}/*.met.bak` > do > mv ${j} `echo ${j} | awk -F'.' '{printf $1"."$2;}'` > done > done > > > Esto te renombra de forma automatica y recursiva como tu quieres, > comenzando en el directorio X que tu le indiques. Este sistema puede dar problemas si hay nombres con puntos, como directorio.primero/fichero.que.quieres.cambiar.met.bak, o si hay espacios en los nombres (no sé exactamente como nombra los ficheros y directorios overnet) yo haría mv "${j}" "`echo ${j} | sed 's/met.bak$/met/g'`" -- Miguel Rodriguez Penabad[EMAIL PROTECTED] Laboratorio de Bases de Datos http://emilia.dc.fi.udc.es/labBD Despacho 0.01 Tel. 981 167000 ext. 1333 Facultade de InformáticaUniversidade da Coruña (Spain)
Re: Renombrar recursivamente
Hola Salva, hazte un shell, del tipo: for i in `find X -type d` do for j in `ls -1 ${i}/*.met.bak` do mv ${j} `echo ${j} | awk -F'.' '{printf $1"."$2;}'` done done Esto te renombra de forma automatica y recursiva como tu quieres, comenzando en el directorio X que tu le indiques. Saludos y gracias. "Salva." <[EMAIL PROTECTED] Para: debian-user-spanish@lists.debian.org rg> cc: Asunto: Renombrar recursivamente 26/02/2004 21:01 Hola, Estoy usando overnet(cliente p2p) y de vez en cuando me peta y me deja de descargar, ocurre que tengo que renombrar los ficheros *.met.bak a *.met de cada directorio de cada descarga, lo que a veces es un poco coñazo. ¿Sabéis si hay algún programa que renombre recursivamente dentro de los directorios? Salva -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: Renombrar recursivamente
On Thu, 26 Feb 2004 21:01:03 +0100 "Salva." <[EMAIL PROTECTED]> wrote: > Hola, > > Estoy usando overnet(cliente p2p) y de vez en cuando me peta y me deja > de descargar, ocurre que tengo que renombrar los ficheros *.met.bak a > *.met de cada directorio de cada descarga, lo que a veces es un poco coñazo. > > ¿Sabéis si hay algún programa que renombre recursivamente dentro de los > directorios? Primero te haces un pequeño script: #!/bin/sh mv $1 `dirname $1`/`basename $1 .bak` Si lo escrives en un fichero renom.sh, poderá hacer $ find . -name "*.met.bak" -exec ./renom '{}' \; Espero que funcione.
Re: Renombrar recursivamente
El jue, 26-02-2004 a las 21:01, Salva. escribió: > ¿Sabéis si hay algún programa que renombre recursivamente dentro de los > directorios? Python es tu amigo: #!/usr/bin/env python import os def renombraDir(directorio): lista_met = [x for x in os.listdir(directorio) if x.find(".met") is not -1 and not os.path.isdir(x)] i = 0 for l in lista_met: print "Moviendo "+str(l)+" a "+str(l)+".bak" os.system("cd "+str(directorio)+" && mv "+str(l)+" "+str(l)+".bak") i = i + 1 print "***" print str(i)+" archivos renombrados en el directorio "+str(directorio) print "***" def recorreDirectorios(directorio_padre): lista_dir = [x for x in os.listdir(directorio_padre) if os.path.isdir(x)] for l in lista_dir: renombraDir(l) if __name__ == "__main__": recorreDirectorios(".") # Fin de programa Copia y pega el programa en un archivo, por ejemplo renombra_met.py, después dale permisos de ejecución (chmod a+x renombra_met.py), y ejecútalo en el directorio que quieras: cp renombra_met.py directorio cd directorio ./renombra_met.py Por cierto, de nada ;-) -- /|\ Israel Herraiz <[EMAIL PROTECTED]> /_|_\ Fingerprint: 1D08 6AB1 709D 37A2 0CFD \ | / _ 9733 CEE4 0EA0 6248 BA12 \|/ ( ) _._ '.U .'_|_'. '. '. |(o_ (o_ (o_ {o_ (o_//\_.___ //| //\ (')_ (\)_ V_/_'oo' V_|_ V__)_ signature.asc Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente