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
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"
)
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
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
$
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
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