2025年4月

实现指定目录下保留最新N个文件的Shell脚本:

#!/bin/bash

# 参数检查
if [ $# -ne 2 ]; then
    echo "Usage: $0 <directory> <number_of_files_to_keep>"
    exit 1
fi

directory="$1"
n="$2"

# 验证目录是否存在
if [ ! -d "$directory" ]; then
    echo "Error: Directory '$directory' does not exist."
    exit 1
fi

# 验证保留数量是否为合法数字
if ! [[ "$n" =~ ^[0-9]+$ ]]; then
    echo "Error: Invalid number format. Please enter a positive integer."
    exit 1
fi

# 安全删除旧文件的命令链
find "$directory" -maxdepth 1 -type f -printf "%T@ %p\0" | \
  sort -z -k1nr | \
  cut -z -d' ' -f2- | \
  tail -z -n +$(($n + 1)) | \
  xargs -0 -r rm -f -- 

echo "Success: Kept latest $n files in '$directory'."

使用示例:

# 保留/var/log目录下最新的5个文件
sudo ./keep_latest.sh /var/log 5