BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

¿Script para duplicar archivo numerándolo?

BocaDePez
BocaDePez

Hola, feliz verano.

En esta ocasión buscaba un mini-script (o una línea de comandos) que me permitiese duplicar un mismo archivo un número determinado de veces y que esos duplicados fuesen numerados correlativamente.

El archivo en cuestión tiene una extensión *.7z.001 y quisiera duplicarlo numerándolo desde el *.002 hasta, por ejemplo, *.017, manteniendo el nombre del archivo igual.

¿Es posible esto?

Perdón por mi poco conocimiento.

Gracias y salud.

OFFTOPIC: ¿es normal que tenga que usar Google Chrome para escribir este post, ya que Firefox e IceCat no me respetan los saltos de línea?

superllo

Sobre el script ni idea, alguien te ayudará, pero sobre lo del navegador no, no es normal, yo uso Firefox y no tengo problemas:

apt-cache policy firefox
firefox:
Instalados: 3.6.8+build1+nobinonly-0ubuntu0.10.04.1
Candidato: 3.6.8+build1+nobinonly-0ubuntu0.10.04.1
Tabla de versión:
*** 3.6.8+build1+nobinonly-0ubuntu0.10.04.1 0
500 archive.ubuntu.com/ubuntu/ lucid-updates/main Packages
500 archive.ubuntu.com/ubuntu/ lucid-security/main Packages
100 /var/lib/dpkg/status
3.6.3+nobinonly-0ubuntu4 0
500 archive.ubuntu.com/ubuntu/ lucid/main Packages

🗨️ 42
BocaDePez
BocaDePez

Gracias por su respuesta.

En lo que respecta a la compatibilidad de navegadores con esta web, debo decirle que yo no uso Firefox instalado, sino que me descargo el código fuente de la web oficial y con un enlace en el Escritorio lo ejecuto tal cual directamente. Lo mismo hago con IceCat. Sin embargo, Chrome SÍ lo uso con instalación (¿tendrá algo que ver?)

En cuanto a lo del script consultando por otros lares he conseguido crearme yo mismo este script que hace lo que estaba buscando.

#!/bin/bash

# DESCRIPCIÓN: este script está hecho para duplicar el primer trozo de un archivo cortado con 7z renumerando los resultados correlativamente

# CÓMO USAR:

# Si las duplicaciones deseadas son hasta 9 invocar el script así: "$ ./duplica (nº de 1 a 9)"

# Si las duplicaciones deseadas son hasta 99 invocar el script así: "$ ./duplica 9 (nº de 10 a 99)"

# Si las duplicaciones deseadas son hasta 999 invocar el script así: "$ ./duplica 9 99 (nº de 100 a 999)"

for archivo in *.001

do

j=$1

done

base=`basename "$archivo" 001`

while [ "$i" != $j ]

do

let "i = i + 1"

cp $archivo ./$base"00$i"

done

for archivo in *.001

do

j=$2

done

base=`basename "$archivo" 001`

while [ "$i" != $j ]

do

let "i = i + 1"

cp $archivo ./$base"0$i"

done

for archivo in *.001

do

j=$3

done

base=`basename "$archivo" 001`

while [ "$i" != $j ]

do

let "i = i + 1"

cp $archivo ./$base"$i"

done

Un saludo.

🗨️ 21
BocaDePez
BocaDePez

Iba a contestarte el asunto del script, pero me llamaron unos pesados por teléfono. Cada día la gente está más pesada. Luego, al postear, se me borró el mensaje porque creo que pasó mucho tiempo en espera. Lo repito, si me deja la cerveza:

#!/bin/bash cabra=1 while [ "$cabra" -lt "$3" ] do cp $1 $2$cabra cabra=`expr $cabra + 1` done

$ ls duplicar.sh name.7z.001

$ ./duplicar.sh name.7z.001 nombre_que_sea.7z. 17

$ ls duplicar.sh nombre_que_sea.7z.13 nombre_que_sea.7z.4 name.7z.001 nombre_que_sea.7z.14 nombre_que_sea.7z.5 nombre_que_sea.7z.1 nombre_que_sea.7z.15 nombre_que_sea.7z.6 nombre_que_sea.7z.10 nombre_que_sea.7z.16 nombre_que_sea.7z.7 nombre_que_sea.7z.11 nombre_que_sea.7z.2 nombre_que_sea.7z.8 nombre_que_sea.7z.12 nombre_que_sea.7z.3 nombre_que_sea.7z.9

Funcionamiento - ./script "nombre_fichero_a_duplicar" "nombre_ficheros_duplicados" "número de duplicados"

Si te vale la idea, lo modificas, le añades quesos, etc.

Repetiste este post en varios sitios. Internet está lleno con los duplicados de este mensaje. Tú eres también un poco pesado con la manía de repetir los mensajes en todos los portales que se te ponen por delante.

Salto las líneas con br br y los cuernos del tag:

Me voy un rato al quiosco de la playa, br br

🗨️ 20
BocaDePez
BocaDePez

¡Coño! Se me olvidó saltar las líneas al script. Esto es una lata: br br br beer

#!/bin/bash
cabra=1
while [ "$cabra" -lt "$3" ]
do
cp $1 $2$cabra
cabra=`expr $cabra + 1`
done

Ahora sí, supongo.

🗨️ 15
BocaDePez
BocaDePez
🗨️ 14
BocaDePez
BocaDePez
🗨️ 13
BocaDePez
BocaDePez
🗨️ 12
BocaDePez
BocaDePez
BocaDePez
BocaDePez
🗨️ 10
BocaDePez
BocaDePez
-1
🗨️ 3
superllo
🗨️ 1
BocaDePez
BocaDePez
-1
BocaDePez
BocaDePez
BocaDePez
BocaDePez
🗨️ 5
BocaDePez
BocaDePez
🗨️ 4
BocaDePez
BocaDePez
🗨️ 3
BocaDePez
BocaDePez
🗨️ 2
BocaDePez
BocaDePez
🗨️ 1
BocaDePez
BocaDePez
BocaDePez
BocaDePez

Repetiste este post en varios sitios. Internet está lleno con los duplicados de este mensaje. Tú eres también un poco pesado con la manía de repetir los mensajes en todos los portales que se te ponen por delante.

Compartir es la esencia de Internet (según una sentencia judicial). Cuanta más gente vea mi consulta, más opciones conseguiré, otros se aprovecharán del conocimiento y más sugerencias obtendré.
Por favor, no se enfade con un empuja-mouses, sr. Cabrero.

🗨️ 3
BocaDePez
BocaDePez
🗨️ 2
BocaDePez
BocaDePez
🗨️ 1
BocaDePez
BocaDePez
BocaDePez
BocaDePez

Pues vaya, ya sé lo que no deja que mis Firefox e IceCat escriban correctamente en estos foros: es la extensión NoScript que la tengo instalada en esos dos navegadores. Como en Chrome no la tengo instalada, pues puedo postear bien.

Pero claro, no quiero prescindir de esa extensión. Si alguien supiese si se puede configurar para que me deje escribir correctamente le estaría muy agradecido.

Saludos.

🗨️ 19
superllo

Según parece puedes poner excepciones a sitios, posiblemente si dejas que se ejecute código de bandaancha.eu puedas escribir.

🗨️ 3
BocaDePez
BocaDePez

[quote]Antes Fiesty, luego Gusty, después Hardy... no me extraña que la llamen la distro porno.[/quote]

La llaman flower distro para viejas pinches empuja ratones galopantes irreversibles.

BocaDePez
BocaDePez

Me parece que ya está.

Yo tenía desactivada bandaancha.eu, pero me faltaba también desactivar 89.248.106.100 (que creo que es la I.P. de BandaAncha.eu.

Vamos si se publica correctamente este post...

Salud.

🗨️ 1
BocaDePez
BocaDePez
BocaDePez
BocaDePez

probando una línea

probando otra línea

🗨️ 14
BocaDePez
BocaDePez

Prueba con éxito. Yo también estoy usando la extensión NoScript, y tampoco me respetaba el salto de línea, pero acabo de hacer saltar la línea empleando la etiqueta break del código html.

Saltando la línea, break, break. Use the br tag to insert line breaks, pinche empuja ratones.

🗨️ 8
BocaDePez
BocaDePez
🗨️ 7
BocaDePez
BocaDePez
🗨️ 2
BocaDePez
BocaDePez
🗨️ 1
BocaDePez
BocaDePez
anthrax
🗨️ 3
BocaDePez
BocaDePez
BocaDePez
BocaDePez
BocaDePez
BocaDePez

chinito tú

chinito yo

(Prueba)

BocaDePez
BocaDePez

Otra prueba. a ver.

holas.

🗨️ 3
BocaDePez
BocaDePez
🗨️ 2
BocaDePez
BocaDePez
BocaDePez
BocaDePez
LnkLst

prueba a ver si te vale este programa, solo tienes que compilar

/*********************************************************************/
/*                                                                   */
/* Software:       dupli.c                                           */
/* Estado:         Version 0 Release 0 Modif. 1 Patch 0              */
/* Copyright (C)   2010 LnkLst para BandaAncha.eu                    */
/*                                                                   */
/* Funcion:        Duplicar ficheros colocando un sufijo numerico    */
/*                                                                   */
/* Modificado:     16 Agosto     2010 Inicio                         */
/*                                                                   */
/* This program is free software:you can redistribute it and/or      */
/* modify it under the terms of the GNU General Public License as    */
/* published by the Free Software Foundation,either version 2 of the */
/* License,or any later version.                                     */
/*                                                                   */
/* This program is distributed in the hope that it will be useful,   */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of    */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     */
/* GNU General Public License for more details.                      */
/* You should have received a copy of the GNU General Public License */
/* along with this program.If not, see */
/*                                                                   */
/* Este programa es Software Libre; Usted puede redistribuirlo y/o   */
/* modificarlo bajo los terminos de la GNU Licencia Publica General  */
/* (GPL) tal y como ha sido publicada por la Free Software Foundation*/
/* o bien la version 2 de la Licencia, o cualquier version posterior.*/
/*                                                                   */
/* Este programa se distribuye con la esperanza de que sea util,     */
/* pero SIN NINGUNA GARANTIA; tampoco las impli­citas garantias de    */
/* MERCANTILIDAD o ADECUACION A UN PROPOSITO PARTICULAR.             */
/* Consulte la GNU General Public License (GPL) para mas detalles.   */
/* Usted debe recibir una copia de la GNU General Public License(GPL)*/
/* junto con este programa; si no,lea  */
/*                                                                   */
/* Compilacion:                                                      */
/* - Linux x86                                                       */
/*      gcc -o                                    */
/*      Ej.- gcc -o dupli dupli.c                                    */
/*********************************************************************/
#define VERSION     "0.0.0.1"
#define PGMID       "DUPLI"

/*Includes Estandard */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/*Funciones*/
void GrabaHora(void);
/*Estructuras de tiempo*/
time_t   lt;
struct   tms  bt1,bt2,bt3,bt4;
clock_t  t1,t2,t3,t4;
int      TPS=0;               /*Ciclos de cpu*/
/*Contadores*/
int      i=0;
/*Variables*/
char     *FICHIN =0;
char     *directorio=0;
long     COPIAS = 0;
long     ini=0;
char     SALIDA[1024]= "\x0";
int      RCI = 0;

int main(int argc, char **argv)
{
 lt = time(NULL);
 if (argc < 5)
 {
  printf("%.8s Uso:%s     <\n",
          ctime(<)+11,PGMID);
  exit(0);
 }
 t1 = times(&bt1);
 TPS = sysconf(_SC_CLK_TCK);    /*obtengo los ciclos de cpu*/
 //strncpy(FICHIN,argv[1],(long)strlen(argv[1]));
 //strncpy(directorio,argv[2],(long)strlen(argv[2]));
 FICHIN =     (char *) argv[1];
 directorio = (char *) argv[2];
 ini =        (long) atol(argv[3]);
 COPIAS =     (long) atol(argv[4]) + ini;
 printf("%.8s %s Fichero a copiar:%s Directorio Destino:%s Numero de copias:%d Numero inicial.%d\n",
        ctime(<)+11,PGMID,FICHIN,directorio,COPIAS-ini,ini);

 for (i=ini;i (signo menor que) COPIAS;i++)
 {
  memset(SALIDA,'\x0',sizeof(SALIDA));
  sprintf(SALIDA,"cp %s %s/%s.%i",FICHIN,directorio,FICHIN,i);
  RCI = system(SALIDA);
  if (RCI != 0)
  {
   printf("Error %i en copia %i de %s\n",RCI,i,FICHIN);
   break;
  }
  else
  {
   printf("Copia %i OK de %s\n",i,FICHIN);
  }
 }

 GrabaHora();
 return 0;
}

/***---------------------------------------------------------***/
/***Funcion GrabaHora Estadisticas de T.CPU T.Elapsed--------***/
/***---------------------------------------------------------***/
void GrabaHora()
{
 t2 = times(&bt2);
 printf("T.CPU:%.2fs T.Elap:%.2fs\n",
         (float)(bt2.tms_utime - bt1.tms_utime)/(float)TPS,\
         (float)(t2 - t1)/(float)TPS);

 return;
}
🗨️ 9
LnkLst

No se que pasa se pierden los signos de "menor y mayor que" al copiar el código

🗨️ 2
BocaDePez
BocaDePez

Si no es en lenguaje ensamblador no tiene gracia

Desaparecen los tags porque el foro se los merienda con html

🗨️ 1
LnkLst

Gracias por el apunte

En ensamblador sería así:

***********************************************************************
*        Equates                                                      *
***********************************************************************
*
R0       EQU   0
R1       EQU   1
R2       EQU   2
R3       EQU   3
R4       EQU   4
R5       EQU   5
R6       EQU   6
R7       EQU   7
R8       EQU   8
R9       EQU   9
R10      EQU   10
R11      EQU   11
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
*
*
**********************************************************************
*        Datalen DSECT.                                              *
**********************************************************************
LENDSECT DSECT
DATALEN  DS    CL4
**********************************************************************
*        Work area DSECT.                                            *
**********************************************************************
WORK     DSECT
*
SAVEAREA DS    18F                       Save area
*
WTOE     DS    0F                        Wto parmlist (ERROR)
WTOELEN  DS    CL02                      Longitud
WTOEFLAG DS    CL02                      Mcs flags
WTOETXT1 DS    CL10                      Nombre del pgm
WTOETXT2 DS    CL09                      2 parte
WTOETXT3 DS    CL27                      1 parte del texto
WTOETXT4 DS    CL19                      2 Parte del texto
WTOEDESC DS    CL02                      Descriptor code
WTOERCDE DS    CL02                      Routing code
*
WORKLEN  EQU   *-WORK
*
*********************************************************************
*   Salvar registros, getmain, direccionamiento              *
*********************************************************************
MQEXITR CSECT
MQEXITR AMODE 31
MQEXITR RMODE ANY
*
         STM   R14,R12,12(R13)           Save registers
         LR    R12,R15                   Set base register
         USING EXITR,R12                 Set addressability
         LR    R11,R1                    Save parmlist address
*
         GETMAIN RU,LV=WORKLEN,LOC=(RES,ANY)
*
         ST    R13,4(R1)                 Savearea backward chain
         ST    R1,8(R13)                 Savearea forward chain
         LR    R13,R1                    Set save area address
         USING WORK,R13                  Set address
*********************************************************************
*        Localizacion de parametros                               *
*********************************************************************
         L     R10,0(R11)                R10

*
         L     R9,4(R11)                 R9

*
         L     R8,8(R11)                 R8
         USING LENDSECT,R8
*
         L     R7,16(R11)                R7

*
CONT04   EQU   *
*********************************************************************
*        Chequear tipo de fichero                                   *
*********************************************************************
         BNE   QUIT
*********************************************************************
*        Chequear reason                                            *
*********************************************************************

         BNE   QUIT

******************************************************************* *
*        Fin de pgm                                          *
******************************************************************* *
QUIT     EQU   *
*
         L     R13,4(,R13)               RESTORE CALLER SAVE AREA ADDR
*
         L     R1,8(,R13)
         FREEMAIN RU,LV=WORKLEN,A=(R1)   FREE SAVE AREA
*
         LM    R14,R12,12(R13)           RESTORE REGISTERS
*
         SR    R15,R15                   RC=0
         BR    R14                       RETURN
*

* ***************************************************************** *
*        ACTION WTO CONSTANTS.                                      *
* ***************************************************************** *
*
* ***************************************************************** *
*
         LTORG                           TO INCLUDE LITERAL POOLS
*
         END
*

:)
LnkLst

Cambia el simbolo del euro € por "<" y la @ por ">"

/*********************************************************************/
/*                                                                   */
/* Software:       dupli.c                                           */
/* Estado:         Version 0 Release 0 Modif. 1 Patch 0              */
/* Copyright (C)   2010 LnkLst para BandaAncha.eu                    */
/*                                                                   */
/* Funcion:        Duplicar ficheros colocando un sufijo numerico    */
/*                                                                   */
/* Modificado:     16 Agosto     2010 Inicio                         */
/*                                                                   */
/* This program is free software:you can redistribute it and/or      */
/* modify it under the terms of the GNU General Public License as    */
/* published by the Free Software Foundation,either version 2 of the */
/* License,or any later version.                                     */
/*                                                                   */
/* This program is distributed in the hope that it will be useful,   */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of    */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     */
/* GNU General Public License for more details.                      */
/* You should have received a copy of the GNU General Public License */
/* along with this program.If not, see €http://www.gnu.org/licenses/@*/
/*                                                                   */
/* Este programa es Software Libre; Usted puede redistribuirlo y/o   */
/* modificarlo bajo los terminos de la GNU Licencia Publica General  */
/* (GPL) tal y como ha sido publicada por la Free Software Foundation*/
/* o bien la version 2 de la Licencia, o cualquier version posterior.*/
/*                                                                   */
/* Este programa se distribuye con la esperanza de que sea util,     */
/* pero SIN NINGUNA GARANTIA; tampoco las impli­citas garantias de    */
/* MERCANTILIDAD o ADECUACION A UN PROPOSITO PARTICULAR.             */
/* Consulte la GNU General Public License (GPL) para mas detalles.   */
/* Usted debe recibir una copia de la GNU General Public License(GPL)*/
/* junto con este programa; si no,lea €http://www.gnu.org/licenses/@ */
/*                                                                   */
/* Compilacion:                                                      */
/* - Linux x86                                                       */
/*      gcc -o €binario@ €Fuente@                                    */
/*      Ej.- gcc -o dupli dupli.c                                    */
/*********************************************************************/
#define VERSION     "0.0.0.1"
#define PGMID       "DUPLI"

/*Includes Estandard */
#include €stdio.h@
#include €stdlib.h@
#include €string.h@
#include €time.h@
#include €sys/times.h@
#include €ctype.h@
#include €sys/types.h@
#include €unistd.h@
#include €sys/socket.h@
#include €netdb.h@
#include €errno.h@
#include €sys/fcntl.h@
#include €signal.h@
/*Funciones*/
void GrabaHora(void);
/*Estructuras de tiempo*/
time_t   lt;
struct   tms  bt1,bt2,bt3,bt4;
clock_t  t1,t2,t3,t4;
int      TPS=0;               /*Ciclos de cpu*/
/*Contadores*/
int      i=0;
/*Variables*/
char     *FICHIN =0;
char     *directorio=0;
long     COPIAS = 0;
long     ini=0;
char     SALIDA[1024]= "\x0";
int      RCI = 0;

int main(int argc, char **argv)
{
 lt = time(NULL);
 if (argc € 5)
 {
  printf("%.8s Uso:%s €Fichero a copiar(ruta completa)@ €Directorio Destino@ €Numero inicial de la copia@ €Numero de copias@ €\n",
          ctime(<)+11,PGMID);
  exit(0);
 }
 t1 = times(&bt1);
 TPS = sysconf(_SC_CLK_TCK);    /*obtengo los ciclos de cpu*/
 FICHIN =     (char *) argv[1];
 directorio = (char *) argv[2];
 ini =        (long) atol(argv[3]);
 COPIAS =     (long) atol(argv[4]) + ini;
 printf("%.8s %s Fichero a copiar:%s Directorio Destino:%s Numero de copias:%d Numero inicial.%d\n",
        ctime(<)+11,PGMID,FICHIN,directorio,COPIAS-ini,ini);

 for (i=ini;i€COPIAS;i++)
 {
  memset(SALIDA,'\x0',sizeof(SALIDA));
  sprintf(SALIDA,"cp %s %s/%s.%i",FICHIN,directorio,FICHIN,i);
  RCI = system(SALIDA);
  if (RCI != 0)
  {
   printf("Error %i en copia %i de %s\n",RCI,i,FICHIN);
   break;
  }
  else
  {
   printf("Copia %i OK de %s\n",i,FICHIN);
  }
 }

 GrabaHora();
 return 0;
}

/***---------------------------------------------------------***/
/***Funcion GrabaHora Estadisticas de T.CPU T.Elapsed--------***/
/***---------------------------------------------------------***/
void GrabaHora()
{
 t2 = times(&bt2);
 printf("T.CPU:%.2fs T.Elap:%.2fs\n",
         (float)(bt2.tms_utime - bt1.tms_utime)/(float)TPS,\
         (float)(t2 - t1)/(float)TPS);

 return;
}
🗨️ 5
BocaDePez
BocaDePez

Muchísimas gracias por su ayuda, aunque no sé cómo funciona lo que ha puesto. Lo he copiado a un archivo de texto, le he cambiado los caracteres que indicaba y le he dado permiso de ejecución, pero al compilarlo como Vd. indica me responde lo siguiente:

usuario@usuario-desktop:~/Escritorio/tux$ gcc -o dupli dupli.c
dupli.c: In function 'main':
dupli.c:80: error: expected expression before '<' token
dupli.c:90: error: expected expression before '<' token
usuario@usuario-desktop:~/Escritorio/tux$

Un saludo.

🗨️ 4
LnkLst

En las lineas 80 y 90 existe un error en la sintaxis, (otra vez los tags html y al ampersand le pasa lo mismo)

80 el simbolo " < " hay que sustituirlo por " lt " (todo junto) ctime(ampersand lt)+11,PGMID); es ==> ctime(<</strong>)+11,PGMID);

90 el simbolo " < " hay que sustituirlo por " " ctime(<)+11,PGMID); es ==> ctime(<)+11,PGMID);

Siento el inconveniente, el programa pretende realizar las copias sufijandolas con el orden de copiado.

Saludos

🗨️ 3
LnkLst
🗨️ 2
superllo
🗨️ 1
LnkLst