it-swarm.com.de

So erhöhen Sie ein Datum in einem Bash-Skript

Ich habe ein Bash-Skript, das ein Datum als Datum verwendet (JJJJ-MM-TT).

Ich konvertiere es in Sekunden mit

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

Was ich tun muss, ist achtmal iterieren, jedes Mal das Epoch-Datum um einen Tag erhöhen und dann im Format mm-dd-yyyy anzeigen

24
JAyenGreen

Verwenden Sie die Fähigkeit des Befehls date, um Tage zu vorhandenen Daten hinzuzufügen.

Folgende:

DATE=2013-05-25

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

produziert:

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

Beachten Sie, dass dies in Ihrem Fall gut funktioniert, aber andere Datumsformate wie z. B. yyyymmdd müssen möglicherweise "UTC" in die Datumszeichenfolge aufnehmen (z. B. 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

Ein weiterer Weg, die Tage von heute zu erhöhen oder zu verringern, ist etwas kompakter:

$ 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

Es ist nicht so einfach, Tage zu erhöhen. Normalerweise wird das Gregorianische Datum in eine julianische Tagesnummer umgewandelt. Dann können Sie den Tag erhöhen. Und danach berechnen Sie das Gregorianische Datum. Hier ist ein Beispielcode:

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

Erhöhen Sie das Datum im Bash-Skript und erstellen Sie eine Ordnerstruktur basierend auf Jahr, Monat und Datum, um die große Anzahl von Dateien über eine Befehlszeilenausgabe zu organisieren.

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