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