shell生成按年月的目录
1 场景
最近有个小需求,需要从nginx日志里面提取一些有用的数据,并格式化成json格式存储,会一直保存,这样的话每天生成一个文件,几年后都好几千个文件,不便于管理和查找,所以想着按年月分别保存,这样的话一个目录下文件最多也就31个文件。
2 脚本
[root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# tree /nas /nas └── json_logs └── 2020 └── 10 ├── json-log_2020-10-26_16:07:54 ├── json-log_2020-10-26_16:07:55 ├── json-log_2020-10-26_16:07:56 └── json-log_2020-10-26_16:07:57 3 directories, 4 files [root@izwz9f1slw8pe82ztnynn1z ~]# cat test_date.sh #!/usr/bin/env bash year=$(date +%Y) month=$(date +%m) ymd=$(date +%Y-%m-%d) hms=$(date +%T) base="/nas/json_logs" ym=${year}/${month} json_logs="${base}/${year}/${month}" #test_file=json-log_${ymd} test_file=json-log_${ymd}_${hms} # mkdir [ ! -d $json_logs ] && { mkdir -p $json_logs; } echo '{"remote_ip":"1.1.1.1"}' > ${json_logs}/${test_file} [root@izwz9f1slw8pe82ztnynn1z ~]# tree -d /nas /nas └── json_logs └── 2020 └── 10 3 directories [root@izwz9f1slw8pe82ztnynn1z ~]# ls /nas json_logs [root@izwz9f1slw8pe82ztnynn1z ~]# ls /nas/ json_logs [root@izwz9f1slw8pe82ztnynn1z ~]# ls /nas/json_logs/ 2020 [root@izwz9f1slw8pe82ztnynn1z ~]# ls /nas/json_logs/2020/ 10 [root@izwz9f1slw8pe82ztnynn1z ~]# ls /nas/json_logs/2020/10/ json-log_2020-10-26_16:07:54 json-log_2020-10-26_16:07:55 json-log_2020-10-26_16:07:56 json-log_2020-10-26_16:07:57 [root@izwz9f1slw8pe82ztnynn1z ~]#
3 手动修改个人测试服务器的时间测试
[root@izwz9f1slw8pe82ztnynn1z ~]# date -s '20201209' Wed Dec 9 00:00:00 CST 2020 [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# date -s '20201210' Thu Dec 10 00:00:00 CST 2020 [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# date -s '20201211' Fri Dec 11 00:00:00 CST 2020 [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# date -s '20201212' Sat Dec 12 00:00:00 CST 2020 [root@izwz9f1slw8pe82ztnynn1z ~]# sh test_date.sh [root@izwz9f1slw8pe82ztnynn1z ~]# date -s '20201211' Fri Dec 11 00:00:00 CST 2020 [root@izwz9f1slw8pe82ztnynn1z ~]# tree /nas /nas └── json_logs └── 2020 ├── 10 │ ├── json-log_2020-10-26_16:07:54 │ ├── json-log_2020-10-26_16:07:55 │ ├── json-log_2020-10-26_16:07:56 │ ├── json-log_2020-10-26_16:07:57 │ ├── json-log_2020-10-27_00:00:06 │ ├── json-log_2020-10-27_00:00:28 │ └── json-log_2020-10-29_00:00:05 ├── 11 │ ├── json-log_2020-11-01_00:00:03 │ ├── json-log_2020-11-01_00:00:23 │ ├── json-log_2020-11-01_00:00:27 │ ├── json-log_2020-11-02_00:00:02 │ ├── json-log_2020-11-02_00:00:03 │ ├── json-log_2020-11-02_00:00:06 │ └── json-log_2020-11-03 └── 12 ├── json-log_2020-12-08 ├── json-log_2020-12-09 ├── json-log_2020-12-10 ├── json-log_2020-12-11 └── json-log_2020-12-12 5 directories, 19 files [root@izwz9f1slw8pe82ztnynn1z ~]# cat test_date.sh #!/usr/bin/env bash year=$(date +%Y) month=$(date +%m) ymd=$(date +%Y-%m-%d) hms=$(date +%T) base="/nas/json_logs" ym=${year}/${month} json_logs="${base}/${year}/${month}" test_file=json-log_${ymd} #test_file=json-log_${ymd}_${hms} # mkdir [ ! -d $json_logs ] && { mkdir -p $json_logs; } echo '{"remote_ip":"1.1.1.1"}' > ${json_logs}/${test_file} [root@izwz9f1slw8pe82ztnynn1z ~]#
***** 不要假装努力,结果不会陪你演戏! *****