web-dev-qa-db-fra.com

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

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-002 etc.

Comment fait-on ça?

12
Tim

Vous pourriez faire quelque chose comme

< file tee file-{001..200}

cependant, si le support devient illisible, le nombre de copies importées importera peu - fondamentalement, les sauvegardes nécessitent 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 pouvant interférer avec les paramètres de votre terminal, vous voudrez probablement vider la sortie standard. au seau

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

C'est le cas classique où les astuces de 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 _ ou - au hasard séparant le numéro 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 améliorer la lisibilité ...)

:-P

21
Rmano

Pour créer une copie unique d'un fichier, vous savez probablement que vous pouvez utiliser cpname__:

cp file file-001

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

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

va copier filedans file-001, file-002, ..., file-200. Voir man xargs pour plus d'informations.

7
Radu Rădeanu

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 au début est défini automatiquement, les fichiers sont nommés file_001.pdf, file_002.pdf, avec les numéros de fichiers placés avant l'extension.

Le scénario:

#!/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)
4
Jacob Vlijm