Linux下面自動清理超過指定大小的文件

Linux下面自動清理超過指定大小的文件

思路:
1)查找test目錄下的全部的文件
2)判斷是否大於100M
3)大於100M則清空

以byte爲單位顯示文件大小,而後和100M大小作對比. 100M換算成字節爲104857600這裏判斷是否大於等於100M,大於則使用echo語句將對應文件置空。
100M=100*1024*1024=104857600byte

可使用dd命令建立一些大於和小於100M的文件進行測試linux

[root@Python test]# dd if=/dev/zero of=/test/sdsds bs=1M count=20
記錄了20+0 的讀入
記錄了20+0 的寫出
20971520字節(21 MB)已複製,0.0141979 秒,1.5 GB/秒
[root@Python test]# du -sh ./*
35M	./123
110M	./12sds
215M	./12ssdsds
5.7M	./jumpserver-master.zip
148K	./lnmp1.5.tar.gz
64M	./nextcloud-14.0.1.zip
20M	./Python-3.5.2.tgz
20M	./sdsds
[root@Python test]# du -sh -b ./*
36700160	./123
115343360	./12sds
225443840	./12ssdsds
5931629	./jumpserver-master.zip
149588	./lnmp1.5.tar.gz
66439148	./nextcloud-14.0.1.zip
20566643	./Python-3.5.2.tgz
20971520	./sdsds
[root@Python test]# ls -l ./*
-rw-r--r-- 1 root root  36700160 10月 18 11:58 ./123
-rw-r--r-- 1 root root 115343360 10月 18 11:58 ./12sds
-rw-r--r-- 1 root root 225443840 10月 18 11:59 ./12ssdsds
-rw-r--r-- 1 root root   5931629 10月 18 12:05 ./jumpserver-master.zip
-rw-r--r-- 1 root root    149588 10月 18 12:03 ./lnmp1.5.tar.gz
-rw-r--r-- 1 root root  66439148 10月 18 12:02 ./nextcloud-14.0.1.zip
-rw-r--r-- 1 root root  20566643 10月 18 12:01 ./Python-3.5.2.tgz
-rw-r--r-- 1 root root  20971520 10月 18 11:59 ./sdsds

注意:
若是文件是帶小數點的M單位,好比文件大小爲5.7M,則換算成byte單位時,就不能直接使用5.7*1024*1024=5976883.2這樣計算了,由於這個5.7M的大小是估算出來的M單位的大小,不是精確到的. 若是直接加-b參數換算成byte單位大小則就是精確的值了,也可使用-k參數來進行換算,以下:
[root@Python test]# du -sh jumpserver-master.zip
5.7M	jumpserver-master.zip
[root@Python test]# du -sh -b jumpserver-master.zip
5931629	jumpserver-master.zip
[root@Python test]# du -sh -k jumpserver-master.zip
5796	jumpserver-master.zip

 方法一: 使用"du -sh -b"或"du -sh -k"來計算文件大小shell

語法
# du [-abcDhHklmsSx][-L <符號鏈接>][-X <文件>][--block-size][--exclude=<目錄或文件>][--max-depth=<目錄層數>][--help][--version][目錄或文件]
  
參數說明:
-a或-all                                                    顯示目錄中個別文件的大小。
-b或-bytes                                                  顯示目錄或文件大小時,以byte爲單位。
-c或--total                                                 除了顯示個別目錄或文件的大小外,同時也顯示全部目錄或文件的總和。
-D或--dereference-args                                      顯示指定符號鏈接的源文件大小。
-h或--human-readable                                        以K,M,G爲單位,提升信息的可讀性。
-H或--si                                                    與-h參數相同,可是K,M,G是以1000爲換算單位。
-k或--kilobytes                                             以1024 bytes爲單位。
-l或--count-links                                           重複計算硬件鏈接的文件。
-L<符號鏈接>或--dereference<符號鏈接>                         顯示選項中所指定符號鏈接的源文件大小。
-m或--megabytes                                             以1MB爲單位。
-s或--summarize                                             僅顯示總計。
-S或--separate-dirs                                         顯示個別目錄的大小時,並不含其子目錄的大小。
-x或--one-file-xystem                                       一開始處理時的文件系統爲準,若趕上其它不一樣的文件系統目錄則略過。
-X<文件>或--exclude-from=<文件>                              <文件>指定目錄或文件。
--exclude=<目錄或文件>                                       略過指定的目錄或文件。
--max-depth=<目錄層數>                                       超過指定層數的目錄後,予以忽略。
--help 顯示幫助。
--version                                                   顯示版本信息。

[root@Python test]# du -sh *
35M	123
110M	12sds
215M	12ssdsds
5.7M	jumpserver-master.zip
148K	lnmp1.5.tar.gz
64M	nextcloud-14.0.1.zip
20M	Python-3.5.2.tgz
20M	sdsds
[root@Python test]# du -sh -b *
36700160	123
115343360	12sds
225443840	12ssdsds
5931629	jumpserver-master.zip
149588	lnmp1.5.tar.gz
66439148	nextcloud-14.0.1.zip
20566643	Python-3.5.2.tgz
20971520	sdsds

使用du -sh -b查找出相應文件的大小,同時使用awk 過濾第一個字段,只保留數字
[root@Python test]# du -sh -b * | awk '{ print $1 }'
36700160
115343360
225443840
5931629
149588
66439148
20566643
20971520

[root@Python test]# du -sh -b * | awk '{ print $2 }' 
123
12sds
12ssdsds
jumpserver-master.zip
lnmp1.5.tar.gz
nextcloud-14.0.1.zip
Python-3.5.2.tgz
sdsds

批量處理的腳本編程

#!/bin/bash
#Author:Mr.Ding
#Created Time:2018-10-18 10:32:24
#Name:/root/cache_gt_60.sh
#Description:清理/test目錄下大於或等於100MB的文件;

for size in $(du -sh -b /test/* | awk '{ print $1 }')
do
   for file in $(du -sh -b /test/* |grep ${size}|awk '{print $2}')
   do  
         if [ ${size} -ge 104857600 ];then
         echo ${file} ${size}
         echo "" > ${file}
         fi  
    done
done

結合crontab進行定時執行
[root@Python shell]# crontab -l
0 0 * * 6 /bin/bash -x /root/scripts/shell/cache_ge_100.sh

執行腳本後結果以下:
[root@Python test]# du -sh *
35M    123
4.0K    12sds
4.0K    12ssdsds
5.7M    jumpserver-master.zip
148K    lnmp1.5.tar.gz
64M    nextcloud-14.0.1.zip
20M    Python-3.5.2.tgz
20M    sdsds

方法二:使用"ls -l"
ls命令是linux下用來列出目錄下的文件. 下面是關於ls的一些常規用法:bash

ls -a    列出文件下全部的文件,包括以「.「開頭的隱藏文件(linux下文件隱藏文件是以.開頭的,若是存在..表明存在着父目錄)。
ls -l    列出文件的詳細信息,如建立者,建立時間,文件的讀寫權限列表等等。
ls -F    在每個文件的末尾加上一個字符說明該文件的類型。"@"表示符號連接、"|"表示FIFOS、"/"表示目錄、"="表示套接字。
ls -s    在每一個文件的後面打印出文件的大小。  size(大小)
ls -t    按時間進行文件的排序  Time(時間)
ls -A    列出除了"."和".."之外的文件。
ls -R    將目錄下全部的子目錄的文件都列出來,至關於咱們編程中的「遞歸」實現
ls -L    列出文件的連接名。Link(連接)
ls -S    以文件的大小進行排序
 
ls能夠結合管道符」|「來進行一下複雜的操做。好比: ls | less用於實現文件列表的分頁
[root@Python test]# ls -l
總用量 464692
-rw-r--r-- 1 root root  36700160 10月 18 11:58 123
-rw-r--r-- 1 root root         1 10月 18 15:01 12sds
-rw-r--r-- 1 root root         1 10月 18 15:01 12ssdsds
-rw-r--r-- 1 root root 104857600 10月 18 15:12 dcml
-rw-r--r-- 1 root root 115343360 10月 18 15:12 dcscdxa
-rw-r--r-- 1 root root 104857600 10月 18 15:12 dcvbn
-rw-r--r-- 1 root root   5931629 10月 18 12:05 jumpserver-master.zip
-rw-r--r-- 1 root root    149588 10月 18 12:03 lnmp1.5.tar.gz
-rw-r--r-- 1 root root  66439148 10月 18 12:02 nextcloud-14.0.1.zip
-rw-r--r-- 1 root root  20566643 10月 18 12:01 Python-3.5.2.tgz
-rw-r--r-- 1 root root  20971520 10月 18 11:59 sdsds
[root@Python test]# ls -l * | awk '{print $5}'
36700160
1
1
104857600
115343360
104857600
5931629
149588
66439148
20566643
20971520

批量處理的腳本less

#!/bin/bash
#Author:Mr.Ding
#Created Time:2018-10-18 15:14:20
#Name:/root/scripts/shell/cache_ge_100_1.sh
#Description:批量清理大於或等於100M的文件.

for size in $(ls -l /test/* |awk '{print $5}')
do
   for file in $(ls -l /test/*|grep $size |awk '{print $9}')
   do  
         if [ ${size} -ge 104857600 ];then
         echo ${file} ${size}
         echo "" > ${file}
         fi  
    done
done

[root@Python test]# chmod 755 /root/scripts/shell/cache_ge_100_1.sh
加入計劃任務同上

執行結果以下:
[root@Python test]# du -sh *
35M    123
4.0K    12sds
4.0K    12ssdsds
4.0K    dcml
4.0K    dcscdxa
4.0K    dcvbn
5.7M    jumpserver-master.zip
148K    lnmp1.5.tar.gz
64M    nextcloud-14.0.1.zip
20M    Python-3.5.2.tgz
20M    sdsds
相關文章
相關標籤/搜索