Как мне легко сделать 5 копий одного файла?

13

Я могу переместить 5 файлов куда-нибудь, используя:

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

Как я могу сделать копию одного файла в 5 раз легко

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

Можно ли не использовать for loop?

кэв
источник

Ответы:

12

Попробуй это

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

(здесь нет bash, чтобы попробовать самому)

ладья
источник
6
заменить for f in $fна for f in $(seq 5).
Дэн Д.
1
Можно ли не использовать for loop?
к
@kev - я всегда видел, как это делается; Кроме того, больше читабельности.
Ладья
3
@kev, что не так с циклом for? Это то, что для петель для ...
Soandos
3
@DanD .: seqне обязательно в Bash. Вы можете использовать for f in {1..5}илиfor ((f=1; f<=5; f++))
Приостановлено до дальнейшего уведомления.
6

Вот способ сделать это без forцикла и без рисков использования eval:

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

Это все еще эффективно петля.

Приостановлено до дальнейшего уведомления.
источник
4

Попробуй tee:

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

Или parallel:

parallel cp my.jpg ::: my-{1..5}.jpg
кэв
источник
3

Вы можете сделать это без зацикливания .. используя расширение teeи {}скобки.

РЕДАКТИРОВАТЬ: (исправлено согласно комментарию Денниса Уильямсона :

Для файла с именем "my-.jpg"

pre="my-"; suf=".jpg"
<"$pre$suf" tee "$pre"{1..5}"$suf" >/dev/null
Peter.O
источник
1
Нет необходимости использовать eval. <"$pre$suf" tee "$pre"{1..5}"$suf"работает просто отлично.
Приостановлено до дальнейшего уведомления.