Comment incrémenter une date dans un script bash

J'ai un script bash qui prend un argument d'une date (aaaa-mm-jj)

Je le convertit en secondes avec

startdate="$(date -d"$1" +%s)";

Ce que je dois faire est d'itérer 8 fois, chaque fois en incrémentant la date d'époque de 1 jour, puis en l'affichant au format mm-JJ-AAAA

21
demandé sur sbj3 2013-09-10 00:52:02

5 réponses

Utilisez la capacité de la commande date pour ajouter des jours aux dates existantes.

Ce qui suit:

DATE=2013-05-25

for i in {0..8}
do
   NEXT_DATE=$(date +%m-%d-%Y -d "$DATE + $i day")
   echo "$NEXT_DATE"
done

Produit:

05-25-2013
05-26-2013
05-27-2013
05-28-2013
05-29-2013
05-30-2013
05-31-2013
06-01-2013
06-02-2013

Notez que cela fonctionne bien dans votre cas, mais d'autres formats de date tels que AAAAMMJJ peuvent avoir besoin d'inclure "UTC" dans la chaîne de date (par exemple. date -ud "20130515 UTC + 1 day")

55
répondu swdev 2015-06-27 11:11:01
startdate=$(date -d"$1" +%s)
next=86400 # 86400 is one day

for (( i=startdate; i < startdate + 8*next; i+=next )); do
     date -d"@$i" +%d-%m-%Y
done
5
répondu Aleks-Daniel Jakimenko-A. 2013-09-09 21:21:02

Juste une autre façon d'incrémenter ou de décrémenter des jours à partir d'aujourd'hui qui est un peu plus compact:

$ date %y%m%d ## show the current date
$ 20150109
$ ## add a day:
$ echo $(date %y%m%d -d "$(date) + 1 day")
$ 20150110
$ ## Subtract a day:
$ echo $(date %y%m%d -d "$(date) - 1 day")
$ 20150108
$ 
1
répondu Bill Matsoukas 2015-01-09 21:15:25

Il n'est pas si facile d'incrémenter des jours. Normalement, cela se fait en convertissant la date grégorienne en un nombre de jours juliens. Ensuite, vous pouvez incrémenter le jour. Et après cela, vous calculez la date grégorienne. Voici un exemple de code:

Http://it.toolbox.com/wiki/index.php/Convert_a_date_to_a_Julian_day

Http://it.toolbox.com/wiki/index.php/Convert_a_Julian_day_to_a_date

0
répondu ceving 2013-09-09 21:01:22

Incrémenter la date dans le script bash et créer une structure de dossier basée sur L'année, le mois et la Date pour organiser le grand nombre de fichiers à partir d'une sortie de ligne de commande.

for m in {0..100}
do
    folderdt=$(date -d "Aug 1 2014 + $m days" +'%Y/%m/%d')
    procdate=$(date -d "Aug 1 2014 + $m days" +'%Y.%m.%d')
    echo $folderdt
    mkdir -p $folderdt
    #chown <user>:<group> $folderdt -R
    cd $folderdt
    #commandline --process-date $procdate
    cd -
done
0
répondu Benoy G 2016-01-13 03:24:24