find命令查詢指定時間的大文件並刪除

Linux下find命令查詢指定時間的大文件並刪除

1.常規方法

1.1 語法:

使用find命令和rm命令結合使用刪除指定時間的文件

--時間單位爲天
find 查詢路徑  -ctime/-mtime/-atime 時間範圍 -name 文件名稱 -type f -exec rm {} \;
--時間單位爲分鐘
find 查詢路徑  -cmin/-mmin/-amin 時間範圍 -name 文件名稱 -type f -exec rm {} \;

1.2 示例:

--刪除/home/testfile目錄下修改時間大於2天,後綴爲.dat的文件
find /home/testfile  -mtime +2 -name "*.dat" -type f -exec rm {} \;

特別說明:
如果文件名稱使用模糊查詢,則需要對文件名部分使用雙引號,如上述示例,否則會出現如下錯誤信息:

find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]

1.3 知識拓展- 關於時間:

Linux爲我們提供了一個簡便的查詢方式,那就是 +n 和 -n。下面以 -mtime 舉例說明:
  -mtime n : n爲數字,意思爲在n天之前的“一天之內”被更改過內容的文件
  -mtime +n : 列出在n天之前(不含n天本身)被更改過內容的文件名
  -mtime -n : 列出在n天之內(含n天本身)被更改過內容的文件名
找 “5天之內被更改過的文件” 就是 find / -mtime -5 ,找“5天前的那一天被更改過的文件” 就是 find / -mtime 5 ,找“5天之前被更改過的文件” 就是 find / -mtime +5。接下來用圖示說明:
在這裏插入圖片描述
由這個時光軸我們可以知道,最右邊爲當前時,+5 代表大於等於 6 天前的文件, -5 代表小於等於 5 天內的文件,5 則是代表 5-6 那一天的文件。

關於find命令使用時間篩選文件說明,可以參考如下博客:
Linux常用命令之 查找命令 find —— 細說 -atime,-mtime,-ctime - isqiao - 博客園

2.非常規方法

當需要刪除的單個文件比較小時,可以使用第一節的常規方法刪除文件。
當需要刪除的單個文件比較大時,使用rm命令刪除後可能會出現磁盤空間不釋放的情況。此時的處理思路如下:

第一步:查找需要刪除的大文件並將內容清空

沒有使用find命令時,可以使用如下方法清空文件內容(此處以test.txt爲例)

echo ''> test.txt
cat /dev/null > test.txt

> test.txt
cp /dev/null test.txt
dd if=/dev/null of=test.txt
truncate -s 0 test.txt

如果需要和find命令結合,則無法使用echo命令,但是可以使用truncate命令,如下示例查詢/home/testfile目錄下修改時間大於2天,後綴爲dat的文件,並將其內容清空:

find /home/testfile  -mtime +2 -name "*.dat" -type f -exec truncate -s 0 {} \;

【關於truncate命令】
truncate 可被用來將一個文件縮小或者擴展到某個給定的大小。你可以利用它和 -s 參數來特別指定文件的大小。要清空文件的內容,則將文件的大小設定爲 0即可

關於快速刪除大文件的方法可以參考如下博客:
Linux 下清空或刪除大文件/大量文件的幾種方法_運維_sd4493091的博客-CSDN博客

第二步:刪除文件大小爲0的文件

文件內容清空後,將其刪除

find /home/testfile -name "*.dat" -type f -size 0 -exec rm {} \;

特別說明:

  1. 此處不能再使用與第一步相同的時間範圍框定,因爲truncate操作後的文件的mtime時間已經發生變化
  2. 若相同路徑下已經存在大小爲0、相同後綴但不能被刪除的文件不適用此方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章