Shell kodunuzun iki sorunu var:
echoOlmamalı.
- Değişken
$i, $1hedef dosya adındaki gibi yanlış yazılmış .
Bir dosyanın kopyasını, dosyayla aynı dizinde yapmak için
cp thefile thecopy
Oraya başka bir şey eklerseniz, örneğin
cp thefile theotherthing thecopy
o zaman kopyalamak istediğiniz varsayılır thefileve theotherthingiçine dizinde denilen thecopy.
Senin durumunda, özel olarak adlandırılmış test.oggve echodizine kopyalamak için adlandırılmış bir dosyayı arar test$1.ogg.
Büyük $1olasılıkla boş bir dizeye genişleyecektir. Bu nedenle, echokomuttan sildiğinizde "test.ogg ve test.ogg aynı dosyalardır"; yürütülmekte olan komut esasen
cp test.ogg test.ogg
Bu muhtemelen bir yanlış yazımdır.
Sonunda, böyle bir şey istersiniz:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
Veya alternatif olarak
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
Veya, kullanarak tee:
tee test{1..100}.ogg <test.ogg >/dev/null
Not: Bu büyük olasılıkla 100 kopya için işe yarar, ancak binlerce kopya için "çok uzun bir tartışma listesi" hatası oluşturabilir. Bu durumda, bir döngü kullanmaya geri dönün.
echoolmamalıdır hangi ve$1hangi olmalıdır$i?