Ваш код оболонки має два випуски:
- Там
echoне повинно бути.
- Змінна
$iвведена неправильно, як $1у назві файла призначення.
Щоб зробити копію файлу в тому ж каталозі, що і сам файл, використовуйте
cp thefile thecopy
Якщо ви вставите щось інше туди, напр
cp thefile theotherthing thecopy
то передбачається, що ви хочете скопіювати thefileі theotherthingв каталог, який називається thecopy.
У вашому випадку він спеціально шукає файл з назвою test.oggта ім'ям echoдля копіювання в каталог test$1.ogg.
$1, Швидше за все , розшириться до порожньому рядку. Ось чому при видаленні команди echoз команди ви отримуєте "test.ogg і test.ogg - ті самі файли"; команда, що виконується, по суті
cp test.ogg test.ogg
Це, мабуть, непорозуміння.
Зрештою, ви хочете щось подібне:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
Або, як альтернатива
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
Або, використовуючи tee:
tee test{1..100}.ogg <test.ogg >/dev/null
Примітка. Це, швидше за все, може працювати в 100 примірниках, але для тисяч примірників це може призвести до помилки "аргумент задовго". У цьому випадку поверніться до використання циклу.
echoчого там не повинно бути, а$1яке має бути$i?