Shell kodunuzun iki sorunu var:
echo
Olmamalı.
- Değişken
$i
, $1
hedef 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 thefile
ve theotherthing
içine dizinde denilen thecopy
.
Senin durumunda, özel olarak adlandırılmış test.ogg
ve echo
dizine kopyalamak için adlandırılmış bir dosyayı arar test$1.ogg
.
Büyük $1
olasılıkla boş bir dizeye genişleyecektir. Bu nedenle, echo
komuttan 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.
echo
olmamalıdır hangi ve$1
hangi olmalıdır$i
?