#!/bin/sh ver=`date "+%Y%m%d"` #d1, the beginning date, eg:2017-06-28 d1=$1 d1=`date -d $d1 +%F` #transfer d1 to seconds d2=`date -d $d1 +%s` #increase d1 by one day d2=`expr $d2 + 86400` #transfer d2 from seconds to day d2=`date -d @$d2 +%F` #build query json qj='{"dt":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}}' #export echo $qj #/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongoexport -h 172.ip --port 27017 -d sms -c sms_jour --query="$qj" --fileds="phone,msg,dt,novalidate_flag,appId,dept,smschannel" -o ./$ver_sms_his.csv #/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongoimport -h 10.35.ip --port 28040 -u smsadmin -p xxxxxx -d sms -c sms_jour --type=csv -f phone,msg,dt,novalidate_flag,appId,dept,smschannel --file ./$ver_sms_his.csv #generate js for delete echo 'db.sms_jour.remove({"dt":{{$gte:ISODate("'"$d1"'T00:00:00Z")}, "dt":{$lt:ISODate("'"$d2"'T00:00:00Z")}})' > ./delete.js #delete #/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongoexport -h ip --port 27017 -d sms ./delete.js ####################other info #./mongoexport --db testDB --collection testColl --query="$qj" --fields="userId,userName" --type="csv" --out results"-$d1" --noHeaderLine #/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongoexport -h 172.19ip --port 27017 #generate js for delete #echo 'var db = connect("172.ip:27107/sms");' > delete.js #echo 'db.testColl.remove({"time":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}})' >> delete.js #./mongo delete.js #/opt/mongodb-linux-x86_64-ubuntu1404-3.4.4/bin/mongo delete.js
給定一個日期,如何在shell中計算前幾天或者后幾天的日期?
方法如下:
#給定當前日期 d1=`date +%F` #計算兩天后的日期 offset=2 #d1轉換成秒, since 1970-01-01 00:00:00 UTC d1s=`date -d $d1 +%s` #將偏移天數換算成秒數 offset_s=`expr 86400 \* $offset` #計算偏移后 的秒數 d2s=`expr $d1s + $offset_s` #將偏移后的秒數轉換成日期 d2=`date -d @$d2s + %F`
這里給出一個完整的腳本,用來從MongoDB中導出某個日期范圍內的數據,數據導出后從MongoDB中進行刪除。
#!/bin/sh #d1, the beginning date, eg:2017-06-28 d1=$1 d1=`date -d $d1 +%F` #transfer d1 to seconds d2=`date -d $d1 +%s` #increase d1 by one day d2=`expr $d2 + 86400` #transfer d2 from seconds to day d2=`date -d @$d2 +%F` #build query json qj='{"time":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}}' #export ./mongoexport --db testDB --collection testColl --query="$qj" --fields="userId,userName" --type="csv" --out results"-$d1" --noHeaderLine #generate js for delete echo 'var db = connect("testDB");' > delete.js echo 'db.testColl.remove({"time":{$gte:ISODate("'"$d1"'T00:00:00Z")}, "time":{$lt:ISODate("'"$d2"'T00:00:00Z")}})' >> delete.js #delete ./mongo delete.js