Como copiar um determinado arquivo várias vezes com um final regular?

11

Eu tenho um único arquivo (um PDF) e eu quero ter muitas cópias idênticas na mesma pasta (200 seria legal) chamado file-001 , file-002 etc.

Como faço isso?

    
por Tim 26.08.2014 / 14:46

4 respostas

20

Você poderia fazer algo como

< file tee file-{001..200}

no entanto, se a mídia ficar ilegível, não importará quantas cópias estão nela - fundamentalmente, os backups exigem diversidade .

Observe que tee grava sua entrada padrão na saída padrão, bem como em cada um dos arquivos fornecidos - para arquivos grandes ou para arquivos contendo dados binários ou outros caracteres especiais que possam interferir nas configurações do terminal, você provavelmente quer despejar saída padrão para o balde de bits

< file > /dev/null tee file-{001..200}
    
por steeldriver 26.08.2014 / 15:03
20

Este é o caso clássico em que os truques da shell ajudam bastante.

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

Eu sei que é uma piada , mas se você quiser um aleatório _ ou - separando o número do nome que você pode usar:

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

(várias linhas para ajudar na legibilidade ...)

: - P

    
por Rmano 26.08.2014 / 15:03
7

Para fazer uma única cópia de um arquivo, você provavelmente sabe que pode usar cp :

cp file file-001

Agora, para duplicar mais arquivos, você pode combinar cp com xargs . No seu caso:

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

copiará file para file-001 , file-002 , ..., file-200 . Veja man xargs para mais informações.

    
por Radu Rădeanu 26.08.2014 / 20:31
4

Como sempre, o caminhão python chega atrasado, mas:

torne-o executável, arraste-o por uma janela de terminal, arraste o arquivo para copiar pela janela do terminal e defina o número de cópias:

script file number_ofcopies

O número de zeros à esquerda é definido automaticamente, os arquivos são nomeados file_001.pdf , file_002.pdf , com os números de arquivos colocados antes da extensão.

O script:

#!/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)
    
por Jacob Vlijm 26.08.2014 / 15:59