首頁 > 軟體

shell指令碼實現定時刪除檔案或資料夾

2022-08-22 18:01:08

一、刪除XX天(預設10天)之前某個目錄下面帶.log的紀錄檔檔案,並且輸出檔案顯示刪除的檔案

#!/bin/sh

#如果沒有輸入變數值,預設天數為10
start=$(date +%y-%m-%d-%H%M%m)
File=/temp/delete_$start.txt
FilePath=/data

echo $File

if [ ! -n "$1" ];
then
    day=10
else
     day=$1
fi

#-mtime 10 表示檔案修改時間距離當前為0天的檔案,即距離當前時間不到1天(24小時)以內的檔案
echo "輸出紀錄檔檔案:"
echo "find $FilePath -mtime +$day -name "*.log*" > $File"
find $FilePath -mtime +$day -name *.log* > $File

echo "刪除紀錄檔檔案:"
echo "find $FilePath -mtime +$day -name "*.log*"  -exec rm -rf {} ;"
find $FilePath -mtime +$day -name *.log*  -exec rm -rf {} ;

二、刪除XX天(預設10天)之前的資料夾

#!/bin/sh

#如果沒有輸入變更值,預設天數為10
start=$(date +%y-%m-%d-%H%M%m)
File=/temp/delete_backup_$start.txt
FilePath=/data/backup

echo $File

if [ ! -n "$1" ];
then
    day=10
else
     day=$1
fi

#刪除10天之前的資料夾
echo "輸出紀錄檔檔案:"
echo "find $FilePah -type d -ctime +$day > $File"
find $FilePath -type d -ctime +$day > $File

#壓縮10天之前的資料夾
echo "find $FilePath -type d -ctime +$day | xargs gzip -r"
find $FilePath  -type d -ctime +$day | xargs gzip -r

echo "刪除紀錄檔檔案:"
echo "find $FilePath -type d -ctime +$day | xargs rm -rf"
find $FilePath  -type d -ctime +$day | xargs rm -rf

三、清空檔案內容(產生紀錄檔檔案過大,佔用磁碟空間),可以與定時任務結合使用

每天早上6點執行    0  6 * * *  sh /log/CleanLogFile.sh

#!/bin/bash
path=/log
filename=$path/BigLog.txt

#搜尋大於10KB的檔案
#-size +10k
#搜尋小於10KB的檔案
#-size -10k
#搜尋等於10KB的檔案
#-size 10k

if [ $# -ne 1 ]  
then  
        #echo "預設設定檔案大小為500M"  
        filesize=500M
    else
        filesize=$1
fi 


echo "設定清除檔案大小:$filesize"


if [  -f "$filename" ]; then    
    rm -rf $filename
    echo  "原始檔案已刪除"
else
    echo "$filename不存在"
fi 

find $path -name "*.*"  -size +$filesize -exec ls -lh {} ; | awk '{ print $5,$9}' > $filename

for line in `cat $filename`
do
    #如果有匹配的內容則立即返回狀態值0
    echo "$line" | grep -q "$path"
    #$? 是指上一條命令的執行狀態, 0就是正常
    if [  $? -eq 0 ]
    then
        #獲取檔案型別
        filetype=${line#*.}
        if [ $filetype == "zip"  ];then
            echo "rm -rf $line"
            rm -rf $line
        else
            echo "執行清空命令 cat /dev/null > $line"
            cat /dev/null  >  $line
        fi
    fi
done

編寫shell定時任務

執行命令:

[root@localhost ~]# crontab -e

10 0 * * * /data/auto-del.sh >/dev/null 2>&1

檢視定時任務:

[root@localhost ~]# crontab -l
10 0 * * * /data/auto-del.sh >/dev/null 2>&1

備註:

每隔30分鐘root執行一次:*/30 * * * *  /data/auto-del.sh >/dev/null 2>&1

每天晚上1點執行:0 1 * * *  /data/auto-del.sh >/dev/null 2>&1

1.通過crontab –e來建立自己的定時任務,5個*的含義是,第一個*是分,第二個*是小時,第三個*是日,第4個*是月,第5個*是周,第6列是命令

2.-exec   command   {} ;      —–將查到的檔案執行command操作,{} 和 ;之間有空格

3.find 命令三個選項用於按照時間查詢,單位都是小時:

mtime — 檔案內容上次修改時間
atime — 檔案被讀取或存取的時間
ctime — 檔案狀態變化時間

情況一:正常情況(系統有service命令)

重啟服務命令:[root@centos6 /]# service crond restart

啟動服務命令:[root@centos6 /]# service crond start

停止服務命令:[root@centos6 /]# service crond stop

4.如果需要用到環境變數,必須的指令碼中新增環境變數

例如,載入java變數

export JAVA_HOME="/opt/jdk1.8.0_91"
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$LAMPP_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:${ANT_HOME}/bin

到此這篇關於shell指令碼實現定時刪除檔案或資料夾的文章就介紹到這了,更多相關shell 定時刪除內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com