Comment puis-je faire facilement 5 copies d'un fichier?

13

Je peux déplacer 5 fichiers vers quelque part en utilisant:

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

Comment puis-je faire une copie d'un fichier par 5 fois facilement

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

Est-il possible de ne pas utiliser un for loop?

kev
la source

Réponses:

12

Essaye ça

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

(je n'ai pas besoin de m'essayer ici)

Tour
la source
6
remplacer for f in $fpar for f in $(seq 5).
Dan D.
1
Est-il possible de ne pas utiliser un for loop?
kev
@kev - Je l'ai toujours vu ainsi; aussi, plus readabe.
Tour
3
@kev, qu'est-ce qui ne va pas avec une boucle for? C'est pour
ça
3
@DanD .: seqn'est pas nécessaire dans Bash. Vous pouvez utiliser for f in {1..5}oufor ((f=1; f<=5; f++))
pause jusqu'à nouvel ordre.
6

Voici une façon de le faire sans forboucle et sans les risques d'utilisation eval:

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

C'est toujours effectivement une boucle.

En pause jusqu'à nouvel ordre.
la source
4

Essayez tee:

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

Ou parallel:

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

Vous pouvez le faire sans boucle .. en utilisant teeet l' {}expansion d'accolade.

EDIT: (modifié selon le commentaire de Dennis Williamson :

Pour un fichier nommé "my-.jpg"

pre="my-"; suf=".jpg"
<"$pre$suf" tee "$pre"{1..5}"$suf" >/dev/null
Peter.O
la source
1
Il n'est pas nécessaire d'utiliser eval. <"$pre$suf" tee "$pre"{1..5}"$suf"fonctionne très bien.
pause jusqu'à nouvel ordre.