Bagaimana saya bisa membuat 5 salinan dari satu file dengan mudah?

12

Saya dapat memindahkan 5 file ke suatu tempat menggunakan:

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

Bagaimana saya bisa menyalin satu file sebanyak 5 kali dengan mudah

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

Apakah mungkin untuk tidak menggunakan a for loop?

kev
sumber

Jawaban:

11

Coba ini

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

(tidak perlu bash di sini untuk mencobanya sendiri)

Rook
sumber
5
menggantikan for f in $f dengan for f in $(seq 5).
Dan D.
1
apa itu mungkin tidak untuk menggunakan a for loop?
kev
@ kev - Saya selalu melihatnya dilakukan dengan cara ini; juga, lebih mudah dibaca.
Rook
3
@ kev, apa yang salah dengan for for loop? Ini adalah untuk loop adalah untuk ...
soandos
3
@DanD .: seq tidak perlu di Bash. Kamu bisa memakai for f in {1..5} atau for ((f=1; f<=5; f++))
Dennis Williamson
6

Berikut adalah cara untuk melakukannya tanpa for lingkaran dan tanpa risiko menggunakan eval:

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

Itu masih efektif satu loop.

Dennis Williamson
sumber
4

Mencoba tee:

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

Atau parallel:

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

Anda dapat melakukannya tanpa loop .. menggunakan tee dan {} ekspansi brace.

EDIT: (diamandemen sesuai Dennis Williamson komentar:

Untuk file bernama "my-.jpg"

pre="my-"; suf=".jpg"
<"$pre$suf" tee "$pre"{1..5}"$suf" >/dev/null
Peter.O
sumber
1
Tidak perlu menggunakan eval. <"$pre$suf" tee "$pre"{1..5}"$suf" berfungsi dengan baik.
Dennis Williamson
@ Dennis: Begitu ya .. terima kasih :)
Peter.O