# [software] rename secuencial (cerrado)

## LinuxBlues

En fin, pues estaba jugando con C y pretendía añadir a mv un parámetro para hacer un renombrado secuencial de archivos, esto es, si en un directorio hay cien archivos .txt, empezar desde el primero con: archivo001.txt y acabar con el último como archivo100.txt

Ya, ya sé que alguien sugerirá scripts bash y similares, pero no me interesan; prefiero C porque así puedo añadir un plugin a nautilus, por ejemplo, para hacer lo mismo de forma mucho más elaborada...

Hasta que me he dado cuenta de que util-linux incluye la utilidad rename, pero la verdad es que el man me deja igual, es decir, no aclara nada más que es capaz de hacer un renombrado secuencial, pero en los directorios de prueba en los que lo he ejecutado, termina haciendo cualquier otra cosa excepto la que pretendo...

No le he echado un vistazo al código aún, pero ¿podría alguien con más experiencia con rename explicarme cómo demonios funciona realmente?

Agradecería un ejemplo como el que he expuesto, si hay cien ficheros de texto en un directorio, sea cual sea su nombre, pretendo que empiece desde archivo001.txt y acabe por archivo100.txt

Gracias.Last edited by LinuxBlues on Thu Mar 16, 2006 10:03 pm; edited 1 time in total

----------

## Ferdy

Ayudaría saber qué tipo de modificaciones quieres hacer sobre esos nombres y por qué 'rename' no te funciona... lo poco que lo he usado me funcionó bien.

Saludos.Ferdy

----------

## LinuxBlues

Pues por lo que acierto a comprender en el man, (el que lo creó ya se podía dedicar a otra cosa, el muy ...   :Smile:  ):

```
rename .txt archivo?? *.txt
```

debería hacer un rename secuencial de los mismos, y acabo con todos los ficheros con el mismo nombre, pero con archivo?? al final, tal que así:

esto_archivo??

empieza_archivo??

a_archivo??

mosquearme_archivo??

un_archivo??

montón_archivo??

Puedes omitir los _ y tendrás el mismo resultado que he obtenido    :Evil or Very Mad: 

----------

## Ferdy

```
rename .txt archivo?? *.txt
```

significa: "Para todos los ficheros cuyo nombre siga el patrón '*.txt' sustituir en su nombre la primera ocurrencia de '.txt' por 'archivo??'"

Y parece que es lo que ha hecho ¿no?

Saludos.Ferdy

----------

## LinuxBlues

ok, ¿te importaría poner un ejemplo para lograr lo que pretendo?

Gracias.

----------

## aj2r

A lo mejor me equivoco pero no creo que rename sólo pueda hacer eso que quieres, un script bash para hacer eso (ya sé que no es lo que quieres pero te puede servir de ejemplo) sería:

```

#!/bin/bash

i=`ls | egrep -c texto[0-9]{4}.txt`

archivos=`ls | egrep -v texto[0-9]{4}.txt`

for archivo in $archivos

do

        let "i += 1"

        echo "$archivo --> texto$i.txt"

        mv -u $archivo texto$i.txt

done

rename texto texto0 texto?.txt

rename texto texto0 texto??.txt

rename texto texto0 texto???.txt

```

Esto serviría para 9999 archivos, está echo rápidamente pero creo que funciona   :Smile: 

----------

## Ferdy

LinuxBlues, llamame idiota... pero no soy capaz de ver qué es lo que quieres :/

----------

## LinuxBlues

Perfecto, muchísimas gracias aj2r, por cierto, ¿sabías que vives en un pequeño paraíso?, conservo extraordinarios recuerdos de Granada, aunque llegué a las tantas de la madrugada y en fin, de discotecas por ahí... La sorpresa llegó al día siguiente cuando anduve de tapeo por ahí...   :Wink: 

No quiero andarme por las ramas, a ver si le pillo el truco a este reanme y... entre otras cosas, me curro un man algo más decente en english y se los mando, porque el que tiene sencillamente apesta, así de claro...

Saludos.

----------

## LinuxBlues

Ferdy mis respuestas pueden haber dejado que desear tambien... Debe ser eso.

alehop.txt

patata.txt

perogrullo.txt

pues en fin, quiero pasar todo eso a archivo01.txt, archivo02.txt, archivo03.txt

Disculpas si me expliqué mal...

----------

## Ferdy

Vale... que yo sepa no puedes hacer eso con rename.

Sorry  :Smile: 

----------

## LinuxBlues

ah, ok

Por cierto, me he dado cuenta de otro pequeño gazapo, a ver si se me va a malinterpretar de nuevo...

Pero Grullo fue un filósofo bizantino que dijo que "el hombre, momentos antes de morir, estaba vivo", todo esto tratando de explicar la inmortalidad del alma.... no vaya a ser que el perogrullo.txt se tome equivocadamente...   :Laughing: 

Editado: Evdentemente, por eso fue por lo que PeroGrullo pasó a la posteridad.

Saludos.

----------

## M.A.

A lo mejor esto te sirve:

```

#!/bin/bash

DIRECTORIO=/tmp/pruebas

MASCARA='*.txt'

i=1; pref="000"; base="archivo"

for fichtxt in $DIRECTORIO/$MASCARA; do

  case $i in

     10) pref="00";;

     100) pref="0";;

     1000) pref="";;

  esac

  mv $fichtxt $DIRECTORIO/$base$pref$i.txt

  i=$((i+1))

done

```

Te quedará archivo0001.txt, archivo0002.txt, etc. Si prefieres solamente dos cifras, sólo habría que modificar el pref="0" y en el case, quedarnos tan sólo con el 10) poniéndole 10) pref="";;

----------

## LinuxBlues

Muchas gracias M.A., ya sé que es muy sencillo (al menos relativamente) crear scripts bash para esa labor, pero pretendía o saber de algún programa que lo haga en C o crearlo por mi cuenta, siempre y cuando el tiempo libre me lo permita, en prinicipio como parche o añadido a mv o a rename, para acabar añadiéndolo como plugin a nautilus, pero, en fin, tan sólo estoy empezando a aprender GTK y me ha encantado... y la primera idea que se me pasó por la cabeza fue esta del rename secuencial, porque lo veo muy útil.

Saludos.

----------

