使用du命令實現:
生成幾個測試檔案
[root@localhost cache]
# dd if=/dev/zero of=testfile1 bs=1m count=50
50+0 records in
50+0 records out
52428800 bytes (52 mb) copied, 0.145185 s, 361 mb/s
[root@localhost cache]
# dd if=/dev/zero of=testfile2 bs=1m count=60
60+0 records in
60+0 records out
62914560 bytes (63 mb) copied, 0.58209 s, 108 mb/s
[root@localhost cache]
# dd if=/dev/zero of=testfile3 bs=1m count=80
80+0 records in
80+0 records out
83886080 bytes (84 mb) copied, 1.11964 s, 74.9 mb/s
[root@localhost cache]
# echo "hello world" >testfile4
[root@localhost cache]
# ll -h
total 191m
-rw-r--r-- 1 root root 50m aug 11 20:44 testfile1
-rw-r--r-- 1 root root 60m aug 11 20:44 testfile2
-rw-r--r-- 1 root root 80m aug 11 20:44 testfile3
-rw-r--r-- 1 root root 12 aug 11 20:45 testfile4
[root@localhost cache]
# ll
total 194564
-rw-r--r-- 1 root root 52428800 aug 11 20:44 testfile1 #這裡檔案大小單位為byte
-rw-r--r-- 1 root root 62914560 aug 11 20:44 testfile2
-rw-r--r-- 1 root root 83886080 aug 11 20:44 testfile3
-rw-r--r-- 1 root root 12 aug 11 20:45 testfile4
[root@localhost cache]
#
編寫指令碼,清理/cache目錄下大小超過60m的檔案
[root@localhost cache]
# cat check.sh
#!/bin/bash
#sehn
for i in $(du -sh -b /cache/*
| awk '')do
for f in $(du -sh -b /cache/*
| grep $
| awk '')do
if[ $
-gt 62914560 ]
; then
echo $ $
echo
"" > $
fidone
done
[root@localhost cache]
#
執行,大小超過60m的檔案被清空
[root@localhost cache]
# sh check.sh
/cache/testfile3 83886080
[root@localhost cache]
# du -sh -b *
221 check.sh
52428800 testfile1
62914560 testfile2
1 testfile3
12 testfile4
[root@localhost cache]
#
指令碼內檢視檔案大小命令也可使用 ll命令,實現如下:
將/cache目錄下大小超過50m的檔案清空
[root@localhost cache]
# cat check.sh
#!/bin/bash
#sehn
for i in $(
ls-l /cache/*
| awk '')do
for f in $(
ls-l /cache/*
| grep $
| awk '')do
if[ $
-gt 52428800 ]
; then
echo $ $
echo
"" > $
fidone
done
[root@localhost cache]
# sh check.sh
/cache/testfile2 62914560
[root@localhost cache]
# ll
total 51216
-rw-r--r-- 1 root root 213 aug 11 21:05 check.sh
-rw-r--r-- 1 root root 52428800 aug 11 20:59 testfile1
-rw-r--r-- 1 root root 1 aug 11 21:05 testfile2
-rw-r--r-- 1 root root 1 aug 11 20:59 testfile3
-rw-r--r-- 1 root root 12 aug 11 20:45 testfile4
[root@localhost cache]
#
使用find命令也可以,實現如下:
將/cache目錄下大小超過40m的檔案清空
[root@localhost cache]
# cat check_find.sh
#!/bin/bash
for i in $(find /cache/
-size +40m);do
echo
" " > $i
;done
[root@localhost cache]
# sh check_find.sh
[root@localhost cache]
# ll
total 24
-rw-r--r-- 1 root root 75 aug 11 21:08 check_find.sh
-rw-r--r-- 1 root root 213 aug 11 21:05 check.sh
-rw-r--r-- 1 root root 2 aug 11 21:09 testfile1
-rw-r--r-- 1 root root 1 aug 11 21:05 testfile2
-rw-r--r-- 1 root root 1 aug 11 20:59 testfile3
-rw-r--r-- 1 root root 12 aug 11 20:45 testfile4
[root@localhost cache]
#
結合crontab定時任務自動清理(建議將指令碼放到其他目錄)
[root@localhost cache]
# crontab -l
0 2 *
* 6 /bin/bash -x /cache/check.sh > /dev/null 2>&1
shell指令碼自動清理超過指定大小的檔案
先說下背景 我們線上用的squid,根據經驗值如果長時間執行則快取目錄下的swap.state會慢慢變大,一旦超過60m,squid的效能就會急劇下降,因此需要定時去清理大於60m的swap.state檔案。由此引出需求,查詢cache目錄下的所有大於60m的swap.state檔案並清除,即 1....
Linux下自動清理超過指定大小檔案
掃瞄某個目錄下的檔案,發現超過指定大小即清空 1 掃瞄目錄下的檔案 2 判斷檔案大小 3 清空大於指定檔案的內容 以byte為單位顯示檔案大小,然後和20m大小做對比.20m換算成位元組為20971520這裡判斷是否大於20m,大於則使用echo 語句將對應檔案置空 20m 20 1024 1024...
linux生成指定大小的檔案
dd if dev zero of 50m.file bs 1m count 50 在當前目錄下生成乙個50m的檔案 虛擬塊裝置檔案更通用的名稱是硬碟映象檔案 hard disk image 但不是所有的硬碟映象檔案都是虛擬塊裝置檔案,例如,目前ghost的gho格式的映象檔案就不能成為虛擬機器中的...