Je ne connais pas le contexte, mais la boucle suivante contient tous les éléments dont vous aurez besoin: -
n=0; while (($n < 10)); do ((++n)); echo name=out-$n.avi; done
Cela listera les 10 premiers fichiers de votre séquence.
Après votre modification, je vois plusieurs réponses.
Une modification simple de ma boucle originale serait: -
n=1; while [ -f out-$n.avi ]; do ((++n)); done; echo name=out-$n.avi
Cela fonctionnera bien pour quelques fichiers, mais deviendra de plus en plus inefficace à mesure que le nombre de fichiers atteindra des centaines.
Une solution plus efficace consisterait à enregistrer le dernier numéro de fichier dans son propre fichier: -
n=`line<avicount.text`; ((++n)); echo "$n">avicount.text; echo name=out-$n.avi
Ce script générera un nouveau nom à chaque appel, mais reposera sur avicount.text
restant toujours en synchronisation avec les fichiers et les noms utilisés.
Une meilleure solution serait d'utiliser un horodatage au lieu d'un numéro de séquence: -
echo name=out-`date +%Y%M%d%H%m%S`.avi
Cela donnera un nom unique basé sur la seconde quand le script est appelé, et il peut être utile d’inclure la date de création d’un fichier dans son nom. Ce système permet également de supprimer, d’archiver ou de déplacer les fichiers à volonté, sans affecter les noms de fichiers futurs.
sort
des endroitsout-10.avi
avantout-1.avi
, et avec 10 fichiers le dernier sort toujours commeout-9.avi
. Si vous mettez lesed
commande immédiatement après lafind
puis utilisersort -g
ça devrait marcher.