Come copiare un determinato file più volte con un finale regolare?


13

Ho un singolo file (un PDF) e voglio avere un sacco di copie identiche nella stessa cartella (200 sarebbe bello) di nome file-001, file-002ecc.

Come lo faccio?


No, è per la correzione degli errori.
Tim

Il _ è un refuso che spero?
Rinzwind,

@Rinzwind sì! potrebbe essere interessante - scegli un personaggio casuale per ognuno? : p
Tim

@Tim: Beh, per generare un "_" o "-" casuale puoi printf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )":-P (ed essere avvisato che è una lattina di worm, perché echo -è uno di questi casi angolari ...)
Rmano,

1
@Rmano con -cui credo: P
Tim

Risposte:


22

Potresti fare qualcosa del genere

< file tee file-{001..200}

tuttavia, se il supporto diventa illeggibile, non importa quante copie siano presenti - fondamentalmente i backup richiedono diversità .

Nota che teescrive il suo input standard sull'output standard e su ciascuno dei file dati: per file di grandi dimensioni o per file contenenti dati binari o altri caratteri speciali che potrebbero interferire con le impostazioni del tuo terminale, probabilmente vorrai scaricare l'output standard su il secchio

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

4
tee file-{001..200} < file >/dev/nullmi cerca in modo più leggibile. Vedi questa risposta quasi duplicata: come copiare un file in più cartelle in Terminale?
Radu Rădeanu,

21

Questo è il classico caso in cui i trucchi della shell aiutano molto.

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

E so che è uno scherzo , ma se vuoi un numero casuale _o -separare il numero dal nome puoi usare:

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

(linea multipla per aiutare la leggibilità ...)

:-P


1
E se volessi che ogni numero primo fosse un _e ogni non primo sia -? 1 non è un numero primo e scegli 0! : P Jokes!
Tim

7

Per creare un singolo duplicato di un file probabilmente sai che puoi usare cp:

cp file file-001

Ora, per creare più duplicati in un file, puoi combinarli cpcon xargs. Nel tuo caso:

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

copierà filea file-001, file-002, ..., file-200. Vedi man xargsper maggiori informazioni.


4

Come sempre, il camion pitone arriva in ritardo, ma:

rendilo eseguibile, trascinalo su una finestra del terminale, trascina il file per copiarlo sulla finestra del terminale e imposta il numero di copie:

script file number_ofcopies

Il numero di zeri iniziali viene impostato automaticamente, i file sono denominati file_001.pdf, file_002.pdfcon i filenumbers posizionati davanti l'estensione.

Il copione:

#!/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ì, ho provato con Python prima, ma non mi piaceva l'ineleganza ... Tipicamente vado per Python :)
Tim

@Tim Deve essere il carattere del codice su questo sito che ostacola la bellezza del codice Python :)
Jacob Vlijm,

1
Esistono diversi modi per farlo.
Braiam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.