需求:刪除指定日期之前的舊文件(如日誌、備份)。Linux find 配合 touch -t 創建時間基準文件,利用 -newer 判斷文件新舊,實現精準按時間刪除。
# 1. 創建時間基準文件(2009-12-31 12:00)
touch -t 200912311200 /tmp/time_marker
# 2. 查找比基準文件舊的文件(預覽)
find /path/to/dir ! -newer /tmp/time_marker -ls
# 3. 確認無誤後刪除
find /path/to/dir ! -newer /tmp/time_marker -delete
# 或兼容舊版本
find /path/to/dir ! -newer /tmp/time_marker | xargs rm -f
| 參數 | 含義 |
|---|---|
-t YYYYMMDDhhmm | 指定時間戳(touch) |
-newer file | 文件修改時間比 file 新 |
! -newer file | 文件修改時間比 file 舊(邏輯非) |
-delete | find 內建刪除(效率高、安全) |
| xargs rm | 管道傳給 rm(舊系統兼容) |
# 動態計算 7 天前日期(GNU date)
find /var/log -type f -mtime +7 -delete
# 或使用 touch 基準(跨平台兼容)
touch -d "7 days ago" /tmp/week_ago
find /var/log -type f ! -newer /tmp/week_ago -delete
#!/bin/bash
BACKUP_DIR="/backup"
KEEP_DAYS=30
# 基準時間
touch -d "$KEEP_DAYS days ago" /tmp/cutoff
# 刪除:舊於基準 且 非每月 1 號
find "$BACKUP_DIR" -type f ! -newer /tmp/cutoff \
! -name "*-01-*.tar.gz" -delete
# 刪除 90 天未訪問的文件
find /data -type f -atime +90 -delete
-ls 或 -print 確認列表x 權限,對文件有 w 權限(目錄寫權限允許刪除文件)find 默認包含隱藏文件,無需額外參數-mtime vs -newer:-mtime +N 為 N*24 小時前,-newer 精確到秒,語義更清晰-delete 比 xargs rm 更安全(避免參數過長、竄改風險)touch -t 造基準,find ! -newer 找舊文件,-delete 一鍵清理。掌握這套組合拳,按時間清理文件輕鬆搞定。