Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 按文件修改時間批量刪除:find + touch 實戰技巧

編輯:Linux 教學

需求:刪除指定日期之前的舊文件(如日誌、備份)。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 舊(邏輯非)
-deletefind 內建刪除(效率高、安全)
| xargs rm管道傳給 rm(舊系統兼容)

實戰場景示例

場景 1:刪除 7 天前的日誌


# 動態計算 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

場景 2:保留每月 1 號備份,刪除 30 天前其他備份


#!/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

場景 3:按 atime(訪問時間)清理


# 刪除 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 一鍵清理。掌握這套組合拳,按時間清理文件輕鬆搞定。

Copyright © Windows教程網 All Rights Reserved