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?

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)


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.


4

Spróbuj tee:

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

Lub parallel:

parallel cp my.jpg ::: my-{1..5}.jpg

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

1
Nie trzeba używać eval. <"$pre$suf" tee "$pre"{1..5}"$suf"działa dobrze.
Wstrzymano do odwołania.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.