Como posso fazer 5 cópias de um arquivo facilmente?

13

Posso mover 5 arquivos para algum lugar usando:

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

Como posso copiar cópias de um arquivo 5 vezes com facilidade

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

É possível não usar a for loop?

kev
fonte

Respostas:

12

Tente isto

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

(não tem festança aqui para tentar eu mesmo)

Torre
fonte
6
substitua for f in $fpor for f in $(seq 5).
Dan D.
1
É possível não usar a for loop?
kev
@ kev - eu sempre vi isso assim; Além disso, mais readabe.
Rook
3
@ kev, o que há de errado com um loop for? Isto é o que para loops são ...
soandos
3
@ DanD .: seqnão é necessário no Bash. Você pode usar for f in {1..5}oufor ((f=1; f<=5; f++))
Pausado até novo aviso.
6

Aqui está uma maneira de fazer isso sem forloop e sem os riscos de usar eval:

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

Ainda é efetivamente um loop.

Pausado até novo aviso.
fonte
4

Tente tee:

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

Ou parallel:

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

Você pode fazer isso sem um loop. Usando teee {}preparando a expansão.

EDIT: (alterado conforme o comentário de Dennis Williamson :

Para um arquivo chamado "my-.jpg"

pre="my-"; suf=".jpg"
<"$pre$suf" tee "$pre"{1..5}"$suf" >/dev/null
Peter.O
fonte
1
Não é necessário usar eval. <"$pre$suf" tee "$pre"{1..5}"$suf"funciona muito bem.
Pausado até novo aviso.