Jak mogę łatwo zrobić 5 kopii jednego pliku?

13

Mogę przenieść gdzieś 5 plików za pomocą:

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

Jak mogę łatwo zrobić kopię jednego pliku 5 razy

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

Czy można nie używać for loop?

kev
źródło

Odpowiedzi:

12

Spróbuj tego

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

(nie bash tutaj, aby spróbować sam)

Wieża
źródło
6
wymienić for f in $fz for f in $(seq 5).
Dan D.
1
Czy można nie używać for loop?
kev
@kev - zawsze widziałem, że robi się tak; także więcej readabe.
Gawron
3
@kev, co jest nie tak z pętlą for? To właśnie dotyczy pętli ...
soandos
3
@DanD .: seqnie jest konieczne w Bash. Możesz użyć for f in {1..5}lubfor ((f=1; f<=5; f++))
Wstrzymano do odwołania.
6

Oto sposób na zrobienie tego bez forpętli i bez ryzyka użycia eval:

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

To wciąż skutecznie pętla.

Wstrzymano do odwołania.
źródło
4

Spróbuj tee:

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

Lub parallel:

parallel cp my.jpg ::: my-{1..5}.jpg
kev
źródło
3

Możesz to zrobić bez pętli .. używając teei {}nawiasów klamrowych.

EDYCJA: (poprawiona zgodnie z komentarzem Dennisa Williamsona :

Dla pliku o nazwie „my-.jpg”

pre="my-"; suf=".jpg"
<"$pre$suf" tee "$pre"{1..5}"$suf" >/dev/null
Peter.O
źródło
1
Nie trzeba używać eval. <"$pre$suf" tee "$pre"{1..5}"$suf"działa dobrze.
Wstrzymano do odwołania.