¿Cómo copiar un determinado archivo varias veces con un final regular?


13

Tengo un solo archivo (un PDF) y quiero tener muchas copias idénticas en la misma carpeta (200 sería bueno) file-001, file-002etc.

¿Cómo lo hago?


No, es para corregir errores.
Tim

El _ es un error tipográfico, espero?
Rinzwind

@Rinzwind, sí! eso podría ser interesante: ¿elegir un personaje aleatorio para cada uno? : p
Tim

@Tim: Bueno, para generar un aleatorio "_" o "-" puedes printf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )":-P (y ten en cuenta que es una lata de gusanos, porque echo -es uno de estos casos de esquina ...)
Rmano

1
@Rmano Me quedaré con -creo: P
Tim

Respuestas:


22

Podrías hacer algo como

< file tee file-{001..200}

sin embargo, si el medio se vuelve ilegible, no importará cuántas copias tenga, fundamentalmente las copias de seguridad requieren diversidad .

Tenga en cuenta que teeescribe su entrada estándar en la salida estándar, así como en cada uno de los archivos dados: para archivos grandes o para archivos que contienen datos binarios u otros caracteres especiales que pueden interferir con la configuración de su terminal, es probable que desee volcar la salida estándar a el cubo de bits

< file > /dev/null tee file-{001..200}

44
tee file-{001..200} < file >/dev/nullme busca de manera más legible. Vea esta respuesta casi duplicada: ¿Cómo copiar un archivo a varias carpetas en Terminal?
Radu Rădeanu

21

Este es el caso clásico donde los trucos de shell ayudan mucho.

for i in {000..199}; do cp file file-$i; done

Y sé que es una broma , pero si quieres un número aleatorio _o -separando el número del nombre puedes usar:

for i in {000..199}; do 
    cp file file$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )$i; 
done

(línea múltiple para ayudar a la legibilidad ...)

:-PAG


1
¿Qué pasa si quisiera que cada número primo fuera un _y cada no primo fuera -? 1 no es primo, ¡y eliges por 0! : P Chistes!
Tim

7

Para hacer un solo duplicado de un archivo, probablemente sepa que puede usar cp:

cp file file-001

Ahora, para hacer más duplicados en un archivo, puede combinar cpcon xargs. En tu caso:

echo file-{001..200} | xargs -n 1 cp file

copiará filea file-001, file-002, ..., file-200. Ver man xargspara más información.


4

Como siempre, el camión Python llega tarde, pero:

hacerlo ejecutable, arrástrelo sobre una ventana de terminal, arrastre el archivo para copiar sobre la ventana de terminal y establezca el número de copias:

script file number_ofcopies

El número de ceros a la izquierda se ajusta automáticamente, los archivos se denominan file_001.pdf, file_002.pdfcon los filenumbers colocan antes de la extensión.

La secuencia de comandos:

#!/usr/bin/env python3

import sys
import shutil

orig = sys.argv[1]; n = sys.argv[2]; size = len(str(n)); out = (orig[:orig.rfind(".")], orig[orig.rfind("."):])
for item in [out[0]+"_"+(size-len(str(item)))*"0"+str(item)+out[1] for item in range(1, int(n)+1)]:
    shutil.copyfile(orig, item)

Sí, probé con python antes, pero no me gustó la inelegancia ... Normalmente voy por python :)
Tim

@Tim Debe ser la fuente del código en este sitio lo que dificulta la belleza del código de python :)
Jacob Vlijm

1
Hay varias formas de hacer esto.
Braiam
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.