Comment copier plusieurs fois un certain fichier avec une fin régulière?


13

J'ai un seul fichier (un PDF) et je veux avoir beaucoup de copies identiques dans le même dossier (200 serait bien) nommé file-001, file-002etc.

Comment fait-on ça?


Non, c'est pour la correction d'erreurs.
Tim

Le _ est une faute de frappe j'espère?
Rinzwind

@Rinzwind ouais! cela pourrait être intéressant - choisissez un caractère aléatoire pour chacun? : p
Tim

@Tim: Eh bien, pour générer un "_" ou "-" aléatoire, vous pouvez printf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )":-P (et soyez averti que c'est une boîte de vers, car echo -c'est l'un de ces cas de coin ...)
Rmano

1
@Rmano Je vais rester avec -je pense: P
Tim

Réponses:


22

Vous pourriez faire quelque chose comme

< file tee file-{001..200}

cependant, si le support devient illisible, peu importe le nombre de copies - les sauvegardes nécessitent fondamentalement de la diversité .

Notez que teeécrit son entrée standard dans la sortie standard ainsi que dans chacun des fichiers donnés - pour les fichiers volumineux ou pour les fichiers contenant des données binaires ou d'autres caractères spéciaux qui peuvent interférer avec les paramètres de votre terminal, vous voudrez probablement vider la sortie standard vers le seau à mors

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

4
tee file-{001..200} < file >/dev/nullme cherche plus lisiblement. Voir cette réponse presque en double: Comment copier un fichier dans plusieurs dossiers dans Terminal?
Radu Rădeanu

21

C'est le cas classique où les astuces shell aident beaucoup.

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

Et je sais que c'est une blague , mais si vous voulez un aléatoire _ou -séparer le nombre du nom, vous pouvez utiliser:

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

(plusieurs lignes pour plus de lisibilité ...)

:-P


1
Et si je voulais que chaque nombre premier soit un _et que chaque non premier soit -? 1 n'est pas premier, et vous choisissez pour 0! : P Blagues!
Tim

7

Pour créer un seul double d'un fichier, vous savez probablement que vous pouvez utiliser cp:

cp file file-001

Maintenant, pour créer plus de doublons dans un fichier, vous pouvez combiner cpavec xargs. Dans ton cas:

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

copiera fileà file-001, file-002..., file-200. Voir man xargspour plus d'informations.


4

Comme toujours, le camion python arrive en retard, mais:

rendez-le exécutable, faites-le glisser sur une fenêtre de terminal, faites glisser le fichier à copier sur la fenêtre de terminal et définissez le nombre de copies:

script file number_ofcopies

Le nombre de zéros en tête est automatiquement, les fichiers sont nommés file_001.pdf, file_002.pdfavec les filenumbers placés avant l'extension.

Le 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)

Oui, j'ai essayé avec python plus tôt, mais je n'aimais pas l'inélégance ... Je préfère généralement python :)
Tim

@Tim Ce doit être la police du code sur ce site qui entrave la beauté du code python :)
Jacob Vlijm

1
Il existe plusieurs façons de procéder.
Braiam
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.