Dans le script bash suivant si j = 0000, comment dois-je changer le script bash suivant pour créer des répertoires nommés 0001, 0002, ...? En fait, il crée des répertoires nommés 1, 2, 3
for i in *.jpg; do let j+=1 ; mkdir $j ; done
Merci!
Votre script actuel utilise uniquement une valeur décimale - cela se traduit évidemment par la valeur sans zéros non significatifs.
Vous devez remplir la chaîne à la longueur de 4 caractères, avec des zéros en tête. Pour ce faire, utilisez des astuces ``
pour obtenir le résultat de l'appel printf printf %04d $j
.
Par conséquent, vous devriez avoir la commande complète:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Source: StackOverflow: bash - Remplissage des zéros dans une chaîne
(Évidemment, voir également les réponses supplémentaires à cette question, si vous voulez une solution plus approfondie, mais cela fonctionne certainement parfaitement pour ce cas d'utilisation.)
En utilisant bash, votre meilleure option est:
mkdir {0001..0666}
pour créer des répertoires avec un nom 0001
pour 0666
(avec un remplissage nul).
Si vous voulez des répertoires nommés prefix0001suffix
, prefix0002suffix
... puis:
mkdir prefix{0001..0666}suffix
ça ira.
Si vous souhaitez uniquement des noms de répertoire de numéros impairs
mkdir {0001..0666..2}
et ainsi de suite ... Voir Extension d'accolade dans le bash
manuel de référence .
Comme le souligne FEichinger, vous devez connaître à l'avance le nombre de répertoires. Si vous voulez une solution proche de la vôtre, mais vraiment sûre et utilisant un idiome bash plus moderne:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done