Shell程式設計 自動刪除清理過期日誌

2021-09-01 09:12:44 字數 1711 閱讀 9546

要求:根據檔案最後修改時間刪除清理指定目錄下面的檔案,並在/var/log/deletelog下面生成按月的刪除清理日誌

分析:在查詢檔案時要想不受檔名限制 我們採用檔案最後修改時間mtime進行查詢,而且還適用於刪除過期備份。

find 目錄 -type f 查詢檔案時會根據換行來輸出查詢的檔案,而我們希望給xargs的引數是按照空格輸出的,否則直接結合xargs使用會有一定的影響。(可以增加 -print0 用null來作為邊界符號,然後結合xargs -0 來格式化輸入)

切記在使用find的時候,一定要遵循最小結果集原則;find解析式從左到右,所以我們要確保在最左邊的過濾符號能夠過濾最大資料

解答:命令列測試

[root@myhost yuki]# pwd

/yuki

[root@myhost yuki]# ll

total 8

-rw-r--r-- 1 root root 91 nov 19 16:52 testdel.sh

-rw-r--r-- 1 root root 248 nov 19 16:52 test.sh

[root@myhost yuki]# find /yuki/ -type f -mtime 0

/yuki/testdel.sh

/yuki/test.sh

[root@myhost yuki]# find /yuki/ -type f -mtime 0 -print0

/yuki/testdel.sh/yuki/test.sh

[root@myhost yuki]# find /yuki/ -type f -mtime 0 -print0 |xargs -0

/yuki/testdel.sh /yuki/test.sh

[root@myhost yuki]# find /yuki/ -type f -mtime 0 -print0 |xargs -0 rm -f

[root@myhost yuki]# echo $?

0[root@myhost yuki]# ll

total 0

指令碼
#!/bin/sh

#source /etc/profile

#define variable

logpath=$1

daynum=$2

monthformattime=`date "+%y-%m"`

recordlogpath="/var/log"

if [ !-d $ ];then

mkdir -p $

firecordclearlog=$$.log

deletlog()

find $ -type f -mtime $1 -print0 |xargs -0 rm -f

echo "[`date`] >> [info]: end deteling the useless log files" >> $

}main() ];then

echo "[`date`] >> [error]:logpath is not inited , please give a directory path" >> $

return

fiforwarddaynum=+7

if [ -n $ -a $ -ge 1 ];then

forwarddaynum=$

fideletlog $

}main $ $ $

mysql binlog日誌刪除清理

刪除mysql的binlog日誌有兩種方法 自動刪除和手動刪除 修改mysql的配置檔案my.cnf,新增binlog過期時間的配置項 expire logs days 30,然後重啟mysql,這個有個致命的缺點就是需要重啟mysql。expire logs days引數只支援整數,且範圍是 0,...

Docker 刪除 清理映象

文章首發自個人 本文中,您將學習 docker 如何刪除及清理映象?通過如下兩個都可以刪除映象 docker rmi image 或者 docker image rm image 支援的子命令如下 例如,我們想刪除上章節建立的allen mysql 5.7映象,命令如下 docker rmi all...

刪除,清理中搜,劃詞搜尋辦法。

還被安裝了中搜,劃詞搜尋等。於是使用瑞星卡卡助手清理,發現中搜,劃詞搜尋清理不掉。檢視卡卡提供的資訊。發現是c windows system32 drivers目錄下2個偽裝成微軟公司出品的程式作祟。分別是abhcopy.sys和hcalway.sys。另外c program files huaci...