Wie kann ich auf einfache Weise 5 Kopien einer Datei erstellen?

13

Ich kann 5 Dateien irgendwohin verschieben mit:

$ mv my-{1..5}.jpg /path/to/dir/

Wie kann ich eine Datei einfach 5-mal kopieren?

# doesn't work
$ cp my.jpg my-{1..5}.jpg

Kann man a nicht benutzen for loop?

kev
quelle

Antworten:

12

Versuche dies

for f in {1..5}; do cp my.jpg my$f.jpg; done

(Habe keine Bash hier, um es selbst zu versuchen)

Turm
quelle
6
ersetzen for f in $fmit for f in $(seq 5).
Dan D.
1
Kann man a nicht benutzen for loop?
Kev
@kev - Ich habe es immer so gesehen; auch mehr readabe.
Turm
3
@kev, was ist los mit einer for-Schleife? Dies ist, was für Schleifen sind für ...
soandos
3
@DanD .: seqist in Bash nicht erforderlich. Sie können for f in {1..5}oderfor ((f=1; f<=5; f++))
Bis auf weiteres angehalten verwenden.
6

Hier ist eine Möglichkeit, dies ohne forSchleife und ohne das Risiko der Verwendung zu tun eval:

printf '%s\n' {1..5} | xargs -I {} cp my.jpg my-{}.jpg

Es ist immer noch effektiv eine Schleife.

Bis auf weiteres angehalten.
quelle
4

Versuchen Sie tee:

tee <my.jpg >/dev/null my-{1..5}.jpg

Oder parallel:

parallel cp my.jpg ::: my-{1..5}.jpg
kev
quelle
3

Sie können es ohne eine Schleife tun .. mit teeund {}Erweiterung Klammer.

EDIT: (ergänzt nach Dennis Williamsons Kommentar:

Für eine Datei mit dem Namen "my-.jpg"

pre="my-"; suf=".jpg"
<"$pre$suf" tee "$pre"{1..5}"$suf" >/dev/null
Peter.O
quelle
1
Eval muss nicht verwendet werden. <"$pre$suf" tee "$pre"{1..5}"$suf"funktioniert gut
Bis auf weiteres angehalten.