web-dev-qa-db-fra.com

Comment incrémenter une date dans un script bash

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

Je le convertis en secondes avec

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

Ce que je dois faire, c’est itérer 8 fois, incrémentant à chaque fois la date de l’époque d’un jour et l’affichant ensuite au format mm-jj-aaaa

24
JAyenGreen

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

Le suivant:

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

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

59
swdev
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

Une autre façon d’augmenter ou de diminuer les jours à partir d’aujourd’hui 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
Bill Matsoukas

Il n’est pas si facile d’augmenter les jours. Normalement, cela se fait en convertissant la date grégorienne en un nombre de jours du calendrier Julien. Ensuite, vous pouvez incrémenter la journée. 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
ceving

Incrémentez la date dans le script bash et créez une structure de dossiers basée sur Année, Mois et 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
Benoy G