J'essaie de dupliquer un fichier vidéo x fois depuis la ligne de commande en utilisant une boucle for, j'ai essayé comme ça, mais ça ne marche pas :
for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done
Réponse acceptée :
Votre code shell a deux problèmes :
- L'
echo
ne devrait pas être là. - La variable
$i
est mal orthographié 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 y insérez autre chose, 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
se développera très probablement en une chaîne vide. C'est pourquoi, lorsque vous supprimez le echo
à partir 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
Il s'agit probablement d'une faute de frappe.
Au final, 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.