自動清理超過指定大小的檔案 shell指令碼

2021-10-09 02:36:14 字數 4007 閱讀 8850

使用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格式的映象檔案就不能成為虛擬機器中的...