Votre code shell a deux problèmes:
- Le
echo
ne devrait pas être là.
- La variable
$i
est mal typée comme $1
dans 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 thefile
et theotherthing
dans le répertoire appelé thecopy
.
Dans votre cas, il recherche spécifiquement un fichier appelé test.ogg
et un nommé echo
à copier dans le répertoire test$1.ogg
.
Le $1
sera probablement développé en une chaîne vide. C'est pourquoi, lorsque vous supprimez le echo
de 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.
echo
qui ne devrait pas être là et celle$1
qui devrait l'être$i
?