shell指令碼刪除指定日期和指定日期前的檔案

2021-10-11 05:19:28 字數 1680 閱讀 3165

測試環境redis持久化到硬碟報錯,發現是因為硬碟空間不夠導致。去尋找占用空間較大的任務,發現flink日誌檔案佔了70%容量,在此之前在測試環境沒有對flink日誌進行維護和刪除。為了以後自動維護日誌檔案,需要寫乙個能夠定時執行任務的shell指令碼。

思路:① 每日凌晨執行指令碼,刪除一周之前的那一天的日誌。

此方法的好處是可以指定日期刪除,

shell指令碼如下

#!/usr/bin/sh

source /etc/profile

source ~/.bash_profile

date_str=

`date -d "7 days ago" +%y-%m-%d`

rm_path=/home/flink/flink-1.9.0/log/flink-flink-taskexecutor-*-p2bdap12.log$.txt

echo

$rm_path

rm -rf $rm_path

核心是使用date自動生成日期。關於date,有如下知識點:

-d引數 ,說明要顯示的是後面的字串表示的時間,「1 day ago」 說明是1天前bai的時間。

date "+%y-%m-%d %h-%m-%s "這樣才是顯示時間 +後都是時間格式。

例如:

date +%y%m%d //顯示前天年月日

date +%y%m%d --date="+1 day" //顯示前一天的日期

date +%y%m%d --date="-1 day" //顯示後一天的日期

date +%s //從 1970 年 1 月 1 日 00:00:00 utc 到目前為止的秒數(時間戳)

顯而易見,將要刪除的檔名賦值給rm_path,然後執行rm -rf即可。

②使用方案1的缺陷是,第一次執行指令碼時,只能刪除之前第7天的檔案,再往前的檔案無法刪除。

可以使用find,查詢出符合時間和命名規則的檔案。

引用:linux中find使用

#!/usr/bin/sh

source /etc/profile

source ~/.bash_profile

find /home/flink/flink-1.9.0/log/ -mtime +7 -type f -name "flink-flink-taskexecutor-*-p2bdap12.log*.txt" -exec rm -f \;

在使用find時遇到兩個坑:

① 執行腳本報錯:find: 路徑必須在表示式之前:flink-flink-taskexecutor-1-p2bdap12.log2020-11-19.txt

解決方案:將檔名用""括起來

②執行腳本報錯:find: 遺漏「-exec」的引數

解決方案:注意空格

-exec rm -f \
改為

-exec rm -f  \

shell指令碼實現刪除指定日期之前的檔案

cat delbak.sh bin sh location root sqlbak find location mtime 30 type f xargs rm fps location 是設定查詢的目錄 mtime 30 是設定時間為30天前 type f 這周查詢的型別為檔案 然後加入cront...

mysql刪除指定日期前資料

由於資料上報產生資料量過大,因此需要定期刪除無用資料。mysql語句如下 1 delete from t iot cb device data changed where event time is null or date event time date date sub now interval...

刪除大於指定日期的檔案

刪除大於30天的檔案 find opt backup type f mtime 30 delete或者 find opt backup type f mtime 30 exec rm rf 刪除大小為0的檔案 find opt backup size 0 exec rm i type f 表示只找出...