需刪除特定時間範圍內的檔案?find 指令支援以天為單位,若需精確到「某月份」、「某小時」甚至「某分鐘」,則需結合 Shell 腳本靈活處理。本文詳細對比兩種方法優劣,並提供可直接使用的腳本範例。

# 刪除 5 天前修改的 .doc 檔(刪除前提示)
find . -name '*.doc' -mtime +5 -ok rm {} \;
# 刪除 10 天前存取的檔
find . -atime 10 -print
# 刪除大小為 0 的檔
find . -size 0 -exec rm {} \;
優點:標準工具、支援遞迴、條件豐富。
缺點:執行較慢、資源佔用大、無法精確到「某月份/某小時」。
for filename in *; do
if [ `date -r $filename +%m` == "06" ]; then
rm -f $filename
fi
done
for filename in *; do
if [ `date -r $filename +%H` == "16" ]; then
rm -f $filename
fi
done
for filename in *; do
if [ `date -r $filename +%H%M` == "1622" ]; then
rm -f $filename
fi
done
date -r FILE +%FORMAT 取得檔案修改時間,格式代碼:%Y年 %m月 %d日 %H時 %M分。find 先過濾副檔名,再用腳本精確比對時間,兼顧效率與精度。ls -l 或 find -printf 預覽將刪除清單,確認無誤後再執行刪除。日常維護用 find -mtime/+atime 即可;需按月份、小時、分鐘等精確區間刪除,請使用 Shell 腳本配合 date -r 實現。