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 ~]#
***** 不要假装努力,结果不会陪你演戏! *****

浙公网安备 33010602011771号