Shell日期時間和時間戳的轉換


Gitlab的備份文件是以時間戳顯示的,類似:1438624820_gitlab_backup.tar 為了更易於閱讀,想把文件名轉換成日期格式:2015-08-04_gitlab_backup.tar

所以查找了下Shell里時間轉換的方法,記錄如下備忘。

Linux下時間轉換的一些命令:

  • date +%s   可以得到UNIX的時間戳;
  • 用shell將日期時間與時間戳互轉:

      date -d "2015-08-04 00:00:00" +%s     輸出:1438617600

  • 而時間戳轉換為字符串可以這樣做:

      date -d @1438617600  "+%Y-%m-%d"    輸出:2015-08-04

  • 如果需要得到指定日期的前后幾天:
          seconds=`date -d "2015-08-04 00:00:00" +%s`       #得到時間戳
          seconds_new=`expr $seconds + 86400`                   #加上一天的秒數86400
          date_new=`date -d @$seconds_new "+%Y-%m-%d"`   #獲得指定日前加上一天的日前

修改gitlab備份文件名的腳本:

#!/bin/bash

backup_path=${1-.}
echo Specified Gitlab backup path is : $backup_path

for i in `find $backup_path -mtime 0 -iregex '^.*1[0-9]+_gitlab_backup.tar$' -exec basename {} \;`
do
    time_stamp=`echo $i | cut -d'_' -f1`
    new_name=`date -d @$time_stamp "+%Y-%m-%d"`
    new_file=${new_name}_gitlab_backup.tar
    mv $backup_path/$i $backup_path/$new_file
    echo Moved backup file from name $i to $new_file
done
  • 正則表達式時間戳以1開頭,可以匹配到2033年,夠用。
  • 腳本執行放入crontab,在gitlab backup之后
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
0 4 * * * /bin/bash /data/gitlab/backups/refine.sh /data/gitlab/backups >> /data/gitlab/backups/cron.log 2>&1

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM