Bonjour,
Je voudrais créer plusieurs dossiers à la fois. Par exemple je voudrais créer au début d'un mois donné, un dossier par jour.
Merci de votre assistance.
Version imprimable
Bonjour,
Je voudrais créer plusieurs dossiers à la fois. Par exemple je voudrais créer au début d'un mois donné, un dossier par jour.
Merci de votre assistance.
Bonjour,
en bash, pas de problème, utilise le développement de accolades :Code:
1
2 $ echo mois/{{lun,m{ar,ercre},jeu,vendre,same}di,dimanche} mois/lundi mois/mardi mois/mercredi mois/jeudi mois/vendredi mois/samedi mois/dimanche
Merci bah. Je ne suis pas expert en bash. Mais le format que je voudrais avoir est 22_04_2014.
mouais, bash ne va pas t'aider là :(
il faut trouver les commandes qui listeront les jours entre le premier du mois et le dernier jour du mois, puis passer cette liste à xargs pour compléter le nom des répertoires, et les créer.
Bonjour,
Il n'y a jamais que 12 mois. Pourquoi ne pas mettre le nombre de jours dans un tableau figé?
puis, pour accéder à la valeur de mai:Code:nbjours=( 31 28 31 30 31 30 31 31 30 31 30 31 )
Code:${nbj[4]}
Bonjour,
Exemple pour tous les jour du mois de février (sans connaitre le nombre de jour dans le mois):
Par contre, en général, on choisit plus Année-mois-jour, car plus simple pour faire un tri...Code:
1
2 $ XX=1; while date +%d_%m_%Y --date="2014/02/$XX" 2>/dev/null ; do ((XX+=1)); done | xargs echo 01_02_2014 02_02_2014 03_02_2014 04_02_2014 05_02_2014 06_02_2014 07_02_2014 08_02_2014 09_02_2014 10_02_2014 11_02_2014 12_02_2014 13_02_2014 14_02_2014 15_02_2014 16_02_2014 17_02_2014 18_02_2014 19_02_2014 20_02_2014 21_02_2014 22_02_2014 23_02_2014 24_02_2014 25_02_2014 26_02_2014 27_02_2014 28_02_2014
Bonjour
Voici une autre façon de procéder
Code:
1
2
3 $ mois=2 # Afin de rendre le truc plus paramétrable $ for i in $(seq $(date -d @$(($(date -d "2014-$(expr \( $mois + 1 \) % 12)-01" +%s) - 1)) +%d)); do printf "%02d_%02d_2014 " $i $mois; done 01_02_2014 02_02_2014 03_02_2014 04_02_2014 05_02_2014 06_02_2014 07_02_2014 08_02_2014 09_02_2014 10_02_2014 11_02_2014 12_02_2014 13_02_2014 14_02_2014 15_02_2014 16_02_2014 17_02_2014 18_02_2014 19_02_2014 20_02_2014 21_02_2014 22_02_2014 23_02_2014 24_02_2014 25_02_2014 26_02_2014 27_02_2014 28_02_2014
Exactement. On rajoute ensuite |xargs mkdir derrière et c'est torché.
Bon, c'était plus pour la forme (utiliser seq sur le nb de jours dans le mois) et aussi montrer qu'il y a rarement une seule possibilité. Mais bon, ton exemple est quand-même plus lisible (gros calcul monstrueux chez-moi afin d'obtenir le 1er du mois suivant pour ensuite revenir une seconde en arrière).
Toutefois, les deux exemples ont l'avantage indéniable de gérer les années bissextiles sans se fatiguer à créer un tableau contenant des informations que l'on a déjà pour peu que l'on sache les récupérer et qui, en plus, est faux un an sur quatre...
pour le mois courant :Code:
1
2
3 $ ar=( $(seq -w 1 $(date -d "2014-$(($(date +%m)+1))-01 -1day" +%d)) ) $ printf -v list "%s_$(date +%m_%Y) " "${ar[@]}" $ mkdir $list
C'est vrai que le calcul est laborieux :aie::
Par contre ton exemple via seq, est plus optimum puisque tu n'appelles la commande date qu'une fois, donc en simplifiant:Code:
1
2
3
4 $ date +%d --date="2014/03/01" 01 $ date +%d --date="2014/03/01 1 day ago" 28
J'aurai dû utiliser printf au lieu de echo pour reformater les nombres (par exemple 1 en 01), mais bon...:)Code:
1
2 $ seq 1 $(date +%d --date="2014/$((mois+1))/01 1 day ago") | xargs -IXX echo -n "2014_${mois}_XX " 2014_2_1 2014_2_2 2014_2_3 2014_2_4 2014_2_5 2014_2_6 2014_2_7 2014_2_8 2014_2_9 2014_2_10 2014_2_11 2014_2_12 2014_2_13 2014_2_14 2014_2_15 2014_2_16 2014_2_17 2014_2_18 2014_2_19 2014_2_20 2014_2_21 2014_2_22 2014_2_23 2014_2_24 2014_2_25 2014_2_26 2014_2_27 2014_2_28
seq -w => connaissais pas :applo:
Pfff. C'est là que je vois qu'on perd très vite quand on ne pratique pas (c'est vrai, si je réfléchis bien, j'ai plus administré de réseaux depuis 2008 quoi :aie:)
Attention, toutefois à ton "mois+1" parce que si mois=12 :arf:
ouaips :oops:
'va falloir ajouter quelques tests pour valider ce qui est passé à date.