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 {} \;
特別說明:
- 此處不能再使用與第一步相同的時間範圍框定,因爲truncate操作後的文件的mtime時間已經發生變化
- 若相同路徑下已經存在大小爲0、相同後綴但不能被刪除的文件不適用此方法