在Linux上移除舊檔案(過期的檔案) – 應用find指令

在管理主機的時候常常會遇到主機的應用裡面肥大又過時的log檔案,動輒單個檔案就上看GB等級的log檔日積月累下來恐怕沒有幾台主機可以吃得消。如果每次手動清理除了費時外主機一多也很難管理。其實最好的方式是在系統的排程(如cron)內寫進自動刪除的指令,我這邊所提供的解法是用find指令列出舊的檔案,然後把這些檔案刪除。

1. 用find指令在Linux上列出舊的檔案

find /var/log/apache2 -mtime +30

上面這個指令的意思是在/var/log/apache2底下,-mtime是限定修改時間(單位是24小時),後面接著的數字的表示法如下:

  1. +n:表示比n單位以上的檔案 (例如:+30,代表30天之前)
  2. n:表示比n單位之內的檔案 (例如:-30,代表30天之內)
  3. n:不給給正負號代表正好n單位的檔案。

此外還有time跟min也都是代表修改時間,但是後面接的數字的單位變成分鐘。此外其他相關的指令如下:

  1. -mtime、-mmin:檔案內容(data)最後的修改(modify)時間
  2. -atime、-amin:檔案最後被存取(access)的時間
  3. -ctime、-cmin:檔案狀態(status)最後被修改的時間(change)。 (註:檔案狀態是指:修改擁有者或群組(即調用chown、chgrp)、修改檔案存取權限(即調用chmod)

2. find資料後執行刪除指令

find到檔案後可以用-exec指令來進行相應的處理,下面這個指令示範的是直接下rm指令刪除

find /var/log/apache2 -mtime +30 -exec rm -f {} ;

-exec是表示找到檔案後要執行的指令,現在要執行移除檔案的指令rm,但rm指令會與使用者確認是不是要刪除檔案,因為每個檔案都會問所以挺麻煩的所以加入-f (force) 參數讓rm強制移除檔案。然後 {} 則代表指令接檔案名稱的地方,find會將找到檔案的檔名與路徑帶入到{} 這邊。最後加入; 代表指令結束,不可以省略。

希望這樣介紹可以讓大家更了解find這個指令。