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