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

13

Ich habe eine einzelne Datei (ein PDF) und ich möchte viele identische Kopien in demselben Ordner (200 wären nett) haben file-001, file-002usw.

Wie mache ich es?

Tim
quelle
Nein, es dient zur Fehlerkorrektur.
Tim
Das _ ist ein Tippfehler, hoffe ich?
Rinzwind
@ Rinzwind ja! das könnte interessant sein - für jeden einen zufälligen Charakter auswählen? : p
Tim
@Tim: Nun, um ein zufälliges "_" oder "-" zu generieren, können Sie printf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )":-P (und gewarnt werden, dass es sich um eine Dose Würmer handelt, da echo -es sich um einen dieser
Eckfälle handelt
1
@ Rmano Ich bleibe bei -meiner Meinung: P
Tim

Antworten:

22

Sie könnten so etwas tun

< file tee file-{001..200}

Wenn das Medium jedoch unlesbar wird, spielt es keine Rolle, wie viele Kopien sich auf dem Medium befinden. Grundsätzlich erfordern Backups Abwechslung .

Beachten Sie, dass teedie Standardeingabe sowohl in die Standardausgabe als auch in jede der angegebenen Dateien geschrieben wird - für große Dateien oder für Dateien mit Binärdaten oder anderen Sonderzeichen, die möglicherweise die Terminaleinstellungen beeinträchtigen, möchten Sie wahrscheinlich die Standardausgabe sichern der kleine Eimer

< file > /dev/null tee file-{001..200}
Stahlfahrer
quelle
4
tee file-{001..200} < file >/dev/nullsieht für mich leserlicher aus. Siehe diese fast doppelte Antwort: Wie kopiere ich eine Datei in mehrere Ordner in Terminal?
Radu Rădeanu
21

Dies ist der klassische Fall, in dem Shell-Tricks viel helfen.

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

Und ich weiß, es ist ein Witz , aber wenn Sie einen Zufall wollen _oder -die Zahl vom Namen trennen, können Sie Folgendes verwenden:

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

(mehrere Zeilen zur besseren Lesbarkeit ...)

:-P

Rmano
quelle
1
Was wäre, wenn ich wollte, dass jede Primzahl eine _und jede Nicht-Primzahl ist -? 1 ist keine Primzahl, und Sie wählen für 0! : P Witze!
Tim
7

Um ein einzelnes Duplikat einer Datei zu erstellen, wissen Sie wahrscheinlich, dass Sie Folgendes verwenden können cp:

cp file file-001

Nun, um mehr Duplikate in einer Datei vornehmen, können Sie kombinieren cpmit xargs. In deinem Fall:

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

kopiert filezu file-001, file-002..., file-200. Siehe man xargsfür weitere Informationen.

Radu Rădeanu
quelle
4

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

Machen Sie es ausführbar, ziehen Sie es über ein Terminalfenster, ziehen Sie die zu kopierende Datei über das Terminalfenster und legen Sie die Anzahl der Kopien fest:

script file number_ofcopies

Die Anzahl der führenden Nullen wird automatisch eingestellt, werden die Dateien mit dem Namen file_001.pdf, file_002.pdfmit dem filenumbers platziert vor der Verlängerung.

Das Drehbuch:

#!/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
quelle
Ja, ich habe es früher mit Python versucht, aber die Unaufmerksamkeit hat mir nicht gefallen ... Ich greife normalerweise zu Python :)
Tim
@ Tim Es muss die Schriftart des Codes auf dieser Website sein, die die Hübschheit des Python-Codes behindert :)
Jacob Vlijm
1
Es gibt verschiedene Möglichkeiten, dies zu erreichen.
Braiam