BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

¿Renumerar correlativamente sufijos de archivos?

BocaDePez
BocaDePez

Hola, buenas tardes a todos/as.

El comando split permite cortar archivos en varios trozos con el tamaño deseado. Ejecutando:

$ split -b 100M -d -a 3 [nombre_archivo_a_cortar].avi [nombre_base_de_los_trozos].avi.

me crea trozos de 100 MB de tamaño de la siguiente manera:

[nombre_base_de_los_trozos].avi.000
[nombre_base_de_los_trozos].avi.001
[nombre_base_de_los_trozos].avi.002
etc. .........

Me he dado cuenta que esos trozos pueden ser unidos en otros sistemas operativos, pero para ello hay que renumerar las extensiones de los trozos comenzando por *.001 en vez de *.000. Si son pocos trozos se hace manualmente y listo, pero si fuesen muchos, ¿se podría realizar automáticamente con un script o línea de comandos?

Muchas gracias por adelantado.

Salud.

PD.: este post quizás haría las "delicias" del clonador de cabras, pero me parece que esta vez no me "ayudará", ya que creo que lo han exiliado a la Isla de la Tortuga (por lo menos...).

BocaDePez
BocaDePez

¿Has probado hacha en otros sistemas operativos?

🗨️ 1
BocaDePez
BocaDePez

He bajado a los Infiernos (Windows) a probar.

- Cortado el archivo con split y extensión *.0 Hacha 3.5 no pega el archivo

- Cortado el archivo con split y extensión *.H00 Hacha 4.0 no pega el archivo

La única aplicación que podría pegarlo (con extensión *.000) es Hacha Pro, pero ese Hacha no funciona en W7 e, incluso, en la página del programador ya no aparece Hacha Pro para descargar...

He probado, además, con la línea de comandos de Güíndous:

copy /b archivo.avi.000 archivo.avi.001 ..... > archivo.avi

y no ha funcionado.

Salud.

BocaDePez
BocaDePez

Sí, con un script o con un simble batch puedes hacerlo perfectamente.

vukits

te recomiendo que te mires en guguel 'batch renaming'

y antes de probar cualquier script, haz copia de seguridad :P

ahora estoy un poco vago, a ver si mañana me curro un script :P

🗨️ 5
BocaDePez
BocaDePez

Gracias por su respuesta.

Me han pasado este script que me funciona cuando los trozos a renumerar no superan los 10:

#!/bin/bash -x

read -p "Introducir nombre base de los archivos: " BASE

# Contar la cantidad de archivos que responden al patrón y enviarla a un archivo de texto
ls $BASE.*|wc -l > numero

NUM=`cat numero`

# Comenzar renumerado, de atrás hacia adelante, sumándole uno al nombre, y restándole uno a la variable
for i in `seq 1 $NUM`; do
mv $BASE.0*`expr $NUM - 1` $BASE.0`printf "%02d" $NUM` && NUM=`expr $NUM - 1` ; done

Pero cuando el número de trozos es superior a 10... esto ocurre:

usuario@usuario-desktop:~/Escritorio/aaa$ ./renumera
read -p "Introducir nombre base de los archivos: " BASE
Introducir nombre base de los archivos: video.flv
+ wc -l
+ ls video.flv.000 video.flv.001 video.flv.002 video.flv.003 video.flv.004 video.flv.005 video.flv.006 video.flv.007 video.flv.008 video.flv.009 video.flv.010 video.flv.011 video.flv.012 video.flv.013 video.flv.014 video.flv.015
++ cat numero
+ NUM=16
++ seq 1 16
+ for i in '`seq 1 $NUM`'
++ expr 16 - 1
++ printf %02d 16
+ mv video.flv.015 video.flv.016
++ expr 16 - 1
+ NUM=15
+ for i in '`seq 1 $NUM`'
++ expr 15 - 1
++ printf %02d 15
+ mv video.flv.014 video.flv.015
++ expr 15 - 1
+ NUM=14
+ for i in '`seq 1 $NUM`'
++ expr 14 - 1
++ printf %02d 14
+ mv video.flv.013 video.flv.014
++ expr 14 - 1
+ NUM=13
+ for i in '`seq 1 $NUM`'
++ expr 13 - 1
++ printf %02d 13
+ mv video.flv.012 video.flv.013
++ expr 13 - 1
+ NUM=12
+ for i in '`seq 1 $NUM`'
++ expr 12 - 1
++ printf %02d 12
+ mv video.flv.011 video.flv.012
++ expr 12 - 1
+ NUM=11
+ for i in '`seq 1 $NUM`'
++ expr 11 - 1
++ printf %02d 11
+ mv video.flv.010 video.flv.011
++ expr 11 - 1
+ NUM=10
+ for i in '`seq 1 $NUM`'
++ expr 10 - 1
++ printf %02d 10
+ mv video.flv.009 video.flv.010
++ expr 10 - 1
+ NUM=9
+ for i in '`seq 1 $NUM`'
++ expr 9 - 1
++ printf %02d 9
+ mv video.flv.008 video.flv.009
++ expr 9 - 1
+ NUM=8
+ for i in '`seq 1 $NUM`'
++ expr 8 - 1
++ printf %02d 8
+ mv video.flv.007 video.flv.008
++ expr 8 - 1
+ NUM=7
+ for i in '`seq 1 $NUM`'
++ expr 7 - 1
++ printf %02d 7
+ mv video.flv.006 video.flv.016 video.flv.007
mv: el destino, «video.flv.007», no es un directorio
+ for i in '`seq 1 $NUM`'
++ expr 7 - 1
++ printf %02d 7
+ mv video.flv.006 video.flv.016 video.flv.007
mv: el destino, «video.flv.007», no es un directorio
+ for i in '`seq 1 $NUM`'
++ expr 7 - 1
++ printf %02d 7
+ mv video.flv.006 video.flv.016 video.flv.007
mv: el destino, «video.flv.007», no es un directorio
+ for i in '`seq 1 $NUM`'
++ expr 7 - 1
++ printf %02d 7
+ mv video.flv.006 video.flv.016 video.flv.007
mv: el destino, «video.flv.007», no es un directorio
+ for i in '`seq 1 $NUM`'
++ expr 7 - 1
++ printf %02d 7
+ mv video.flv.006 video.flv.016 video.flv.007
mv: el destino, «video.flv.007», no es un directorio
+ for i in '`seq 1 $NUM`'
++ expr 7 - 1
++ printf %02d 7
+ mv video.flv.006 video.flv.016 video.flv.007
mv: el destino, «video.flv.007», no es un directorio
+ for i in '`seq 1 $NUM`'
++ expr 7 - 1
++ printf %02d 7
+ mv video.flv.006 video.flv.016 video.flv.007
mv: el destino, «video.flv.007», no es un directorio
usuario@usuario-desktop:~/Escritorio/aaa$

Es lógico. Se encuentra con dos archivos que terminan de la misma manera. ¿Cómo se podría distinguir?

Salud.

🗨️ 4
vukits

lo suyo sería mover todos a unos ficheros temporales

🗨️ 3
BocaDePez
BocaDePez
1

¡Ahora sí!

Gracias, una vez más, sr. vukits, por sus pistas.

Se indica al script que cree un subdirectorio y que vaya moviendo los archivos renumerados a él. Así no hay conflicto:

#!/bin/bash

read -p "Introducir nombre base de los archivos: " BASE

# Contar la cantidad de archivos que responden al patrón y enviarla a un archivo de texto
ls $BASE.*|wc -l > numero

mkdir $BASE-renumerados

NUM=`cat numero`

# Comenzar renumerado, de atrás hacia adelante, sumándole uno al nombre, y restándole uno a la variable
for i in `seq 100 $NUM`; do
mv $BASE.*`expr $NUM - 1` $BASE-renumerados/$BASE.`printf "%02d" $NUM` && NUM=`expr $NUM - 1` ; done
for i in `seq 1 $NUM`; do
mv $BASE.0*`expr $NUM - 1` $BASE-renumerados/$BASE.0`printf "%02d" $NUM` && NUM=`expr $NUM - 1` ; done

rm numero

Creo que queda solucionado el tema.

Salud.

🗨️ 2
fervigo
🗨️ 1
BocaDePez
BocaDePez
BocaDePez
BocaDePez

Vaya por d10$ y por la b1rj€n... Ahora me entero que se pueden unir los trozos sin renumerarlos con la aplicación windowsera Cortune...

Y encima también por la línea de comandos de Güíndous:

copy /b trozo.000+trozo.001+trozo.002 ..... nombre_archivo_destino

En fin...

Pero seguiré usando el script gentilmente hecho por fervigo, ya que ese Cortune necesita usar Java, y otras aplicaciones de Hasecorp, no.

Salud.