Wie kopiere ich eine bestimmte Datei mehrmals mit einer regulären Endung?

11

Ich habe eine einzelne Datei (ein PDF) und ich möchte viele identische Kopien im selben Ordner haben (200 wäre nett) namens file-001 , file-002 etc.

Wie mache ich das?

    
Tim 26.08.2014, 14:46
quelle

4 Antworten

20

Sie könnten etwas wie

tun
< file tee file-{001..200}

Wenn jedoch das Medium unlesbar wird, spielt es keine Rolle, wie viele Kopien darauf sind - im Grunde benötigen Backups diversity .

Beachten Sie, dass tee seine Standardeingabe sowohl an die Standardausgabe als auch an jede der angegebenen Dateien schreibt - für große Dateien oder für Dateien, die Binärdaten oder andere Sonderzeichen enthalten, die Ihre Terminaleinstellungen stören könnten möchte die Standardausgabe in den Bit-Bucket ausgeben

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

Dies ist der klassische Fall, in dem Shell-Tricks sehr hilfreich sind.

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

Und Ich weiß, es ist ein Witz , aber wenn du möchtest, dass ein zufälliges _ oder - die Zahl von dem Namen trennt, den du verwenden kannst:

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

(mehrere Zeilen, um die Lesbarkeit zu verbessern ...)

: - P

    
Rmano 26.08.2014 15:03
quelle
7

Um ein einzelnes Duplikat einer Datei zu erstellen, wissen Sie wahrscheinlich, dass Sie cp :

verwenden können
cp file file-001

Um nun mehr Duplikate in einer Datei zu erstellen, können Sie cp mit xargs kombinieren. In Ihrem Fall:

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

kopiert file in file-001 , file-002 , ..., file-200 . Siehe man xargs für weitere Informationen.

    
Radu Rădeanu 26.08.2014 20:31
quelle
4

Wie immer kommt der Python-Truck zu spät, aber:

mach es ausführbar, ziehe es über ein Terminalfenster, ziehe die Datei über das Terminalfenster und setze die Anzahl der Kopien:

script file number_ofcopies

Die Anzahl der führenden Nullen wird automatisch festgelegt, die Dateien heißen file_001.pdf , file_002.pdf , wobei die Dateinummern vor der Erweiterung platziert sind.

Das Skript:

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

Tags und Links