[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Solucionado][OT] renombrado secuencial de archivos




El 29 de septiembre de 2015, 10:57, Jorge A. Secreto <jorgesecreto@gmail.com> escribió:


El 29 de septiembre de 2015, 10:00, fernando sainz <fernandojose.sainz@gmail.com> escribió:
El día 29 de septiembre de 2015, 14:45, Jorge A. Secreto
<jorgesecreto@gmail.com> escribió:
> Hola gente!
> Disculpen que consulte por esta pavada, pero estuve leyendo el man de awk,
> el de sed, el de bash, busqué en google 'numerar archivos linea comando
> linux' y cosas por el estilo y nada me sacó de mi ignorancia :-(
> Tengo algunos miles de archivos de texto que tengo que concatenar en orden.
> Están numerados con el orden que debo respetar al comienzo del nombre, por
> ej '1 xxx.txt' '2 xxx.txt' etc.
> El problema se me presenta cuando los uno con 'cat -s *.txt > unidos.txt',
> porque el orden que usa cat para leerlos es alfabético en vez del orden
> natural numérico, como haría 'ls -v', es decir, ordena '100 ''10 ''1 ' en
> vez de '1 ''10 ''100 ', que es lo que necesito.
> Podría armar algún programa, en alto nivel, para hacerlo, pero me parece
> exagerado, creo que se tiene que poder hacer desde la línea de comando.
> Si álguien de la lista fuera tan amable como para desasnarme, habría subido
> un peldañito más en su camino al cielo.
> Gracias y, nuevamente, disculpen que moleste.


Así sin pensarlo mucho se me ocurre que esto te puede funcionar:

   cat `ls *kk | sort -n`
o
   cat $(ls *kk | sort -n)

S2.

Hola  Fernando, Manolo muchas gracias por contestar.
 

Cat no se lleva bien con la sustitucion de la entrada.  :-P

$ cat `ls -v *.txt` > pepe
cat: opción inválida -- '.'

$ cat -- `ls -v *.txt` > pepe
cat: 01: No existe el fichero o el directorio

$ ls -v *.txt|cat -
Devuelve la lista de archivos porque lo toma como una entrada de texto

por eso se me ocurrió que podría haber alguna forma de renombrarlos poniendo, por ej, los números como 000001, 000002...000010...000100, que solucionaría lo del ordenamiento natural y a partir de ahi sólo queda concatenarlos.

Gracias nuevamente.



Hola  Fernando, Manolo, Camaleon, Pablo muchas gracias por contestar.
Camaleon
sort -g *.txt > ordenados.txt
genera un archivo con los renglones de todos los archivos de orígen preciosamente en orden alfabético. :-D

Pablo
for num in $(seq 1 1000)
do
    cat $num_xxxx.txt >> consolidado.txt
done
funcionaría (y me gustó la idea), pero los archivos los nombran de acuerdo a como sopla el viento, algunos empieza con un cero adelante, pero no todos :-(

Manolo
Como le decía a Pablo los archivos tiene de todo en el nombre, espacios, guiones, acentos, puntos, lo único que respetan, me parece, es que terminan en txt.
Y yo soy bastante chambón con los comandos y sus parámetros, redirecciones, tuberías y esas cosas. Como te podrás haber dado cuenta :-(

La solución que me sirvió:

Finalmente encontré las palabras claves correctas para la búsqueda :-P

http://unix.stackexchange.com/questions/51950/sed-extending-a-string-of-numbers-to-a-certain-number-of-digits-by-padding-with

http://www.linux-party.com/index.php/35-linux/8923-renombrar-multiples-ficheros-quitar-espacios-cambiar-mayusculas-a-la-vez-en-linux

Haciendo un batido de las dos páginas pude armar

for FILE in *.txt ; do NEWFILE=`echo $FILE | sed -r -e 's/[0-9]/0000000&/' -e 's/0*([0-9]{8}[^0-9])/\1/' -e 's/- / /g' -e 's/ /_/g'`; cp -T "$FILE"  numerados/$NEWFILE  ; done

que hizo lo que necesitaba

Nuevamente muchas gracias a todos.

--
Jorge A Secreto
Analista de Sistemas
MP 361

Reply to: