linux指定目录下保留最新N个文件
实现指定目录下保留最新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