Votre code shell a deux problèmes:
- Le
echone devrait pas être là.
- La variable
$iest mal typée comme $1dans le nom du fichier de destination.
Pour faire une copie d'un fichier dans le même répertoire que le fichier lui-même, utilisez
cp thefile thecopy
Si vous insérez autre chose dedans, par exemple
cp thefile theotherthing thecopy
alors on suppose que vous souhaitez copier thefileet theotherthingdans le répertoire appelé thecopy.
Dans votre cas, il recherche spécifiquement un fichier appelé test.ogget un nommé echoà copier dans le répertoire test$1.ogg.
Le $1sera probablement développé en une chaîne vide. C'est pourquoi, lorsque vous supprimez le echode la commande, vous obtenez "test.ogg et test.ogg sont les mêmes fichiers"; la commande en cours d'exécution est essentiellement
cp test.ogg test.ogg
C'est probablement une faute de frappe.
En fin de compte, vous voulez quelque chose comme ça:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
Ou, comme alternative
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
Ou en utilisant tee:
tee test{1..100}.ogg <test.ogg >/dev/null
Remarque: Cela fonctionnerait très probablement pour 100 copies, mais pour des milliers de copies, cela pourrait générer une erreur "liste d'arguments trop longue". Dans ce cas, revenez à l'utilisation d'une boucle.
echoqui ne devrait pas être là et celle$1qui devrait l'être$i?