shell生成按年月的目錄

2022-03-03 02:24:13 字數 4066 閱讀 5824

最近有個小需求,需要從nginx日誌裡面提取一些有用的資料,並格式化成json格式儲存,會一直儲存,這樣的話每天生成乙個檔案,幾年後都好幾千個檔案,不便於管理和查詢,所以想著按年月分別儲存,這樣的話乙個目錄下檔案最多也就31個檔案。

[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=$/$

json_logs="$/$/$"

#test_file=json-log_$

test_file=json-log_$_$

# mkdir

[ ! -d $json_logs ] &&

echo '' > $/$

[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 ~]#

[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=$/$

json_logs="$/$/$"

test_file=json-log_$

#test_file=json-log_$_$

# mkdir

[ ! -d $json_logs ] &&

echo '' > $/$

[root@izwz9f1slw8pe82ztnynn1z ~]#

shell按日期的迴圈

經常有需要按日期執行指令碼補資料。有時候是好幾天的。但是可能整個過程下來會超過24個小時。最早的時候是這樣的乙個方案。for i 0 i 10 i do date date d i days ago y m d sh dojob.sh date done這個方案的不足就是,跨天之後,會漏掉某個日期。...

shell 整理目錄下的備份檔案並生成壓縮包

背景 ci構建下來的備份應用包在伺服器上保留幾十個,空間占用大,看著不好看,可能還用不著,所以準備正好練練手吧!其實ci上可以設定少保留幾個,但是我沒管。我只是想練練指令碼 先來看一下我的伺服器源目錄的資料夾放置 44個挺多的 我想要的結果 不長,但是shell我用的手生。語法都是靠查靠找。實在艱辛...

shell 整理目錄下的備份檔案並生成壓縮包

背景 ci構建下來的備份應用包在伺服器上保留幾十個,空間占用大,看著不好看,可能還用不著,所以準備正好練練手吧!其實ci上可以設定少保留幾個,但是我沒管。我只是想練練指令碼 先來看一下我的伺服器源目錄的資料夾放置 44個挺多的 再來看一下我的結果 不長,但是shell我用的手生。語法都是靠查靠找。實...