Ubuntu/Linux下如何获取指定时间后创建的最新文件名
Linux下获取目录最新创建文件并验证创建时间
一、获取目录中最新创建的文件名
Linux下要获取严格意义上的创建时间(birth time),需注意仅部分文件系统(如ext4)支持该属性,旧文件系统可能无法读取。以下两种常用方法:
方法1:使用ls命令
ls -1 --time=birth --sort=time /目标目录路径 | head -n 1
--time=birth:指定按文件创建时间排序--sort=time:按时间倒序排列(最新文件在前)head -n 1:提取排序后的第一个文件(即最新创建的文件)
方法2:使用find命令(更适合脚本场景)
find /目标目录路径 -maxdepth 1 -type f -printf "%W@ %p\n" | sort -n -r | head -n 1 | awk '{print $2}'
-maxdepth 1:仅遍历当前目录(去掉则递归子目录)-type f:仅匹配文件(排除目录)%W@:输出文件创建时间的Unix时间戳sort -n -r:按时间戳数值倒序排序awk '{print $2}':提取文件名部分
二、验证文件是否在指定时间后创建
步骤1:将指定时间转换为Unix时间戳
假设指定时间为2024-05-01 00:00:00,执行:
specified_time=$(date -d "2024-05-01 00:00:00" +%s)
步骤2:获取目标文件的创建时间戳
用第一步得到的最新文件名替换/最新文件路径:
file_crtime=$(stat -c %W /最新文件路径)
步骤3:对比时间并输出结果
if [ $file_crtime -gt $specified_time ]; then echo "该文件是在指定时间之后创建的" else echo "该文件是在指定时间之前或等于指定时间创建的" fi
整合为一键脚本
如果需要重复执行,可将逻辑写成脚本:
#!/bin/bash # 配置参数 TARGET_DIR="/你的目标目录路径" SPECIFIED_DATE="2024-05-01 00:00:00" # 转换指定时间为时间戳 specified_time=$(date -d "$SPECIFIED_DATE" +%s) # 获取最新创建的文件 latest_file=$(find "$TARGET_DIR" -maxdepth 1 -type f -printf "%W@ %p\n" | sort -n -r | head -n 1 | awk '{print $2}') if [ -z "$latest_file" ]; then echo "目标目录下无文件" exit 1 fi # 获取文件创建时间戳 file_crtime=$(stat -c %W "$latest_file") # 输出结果 echo "最新创建的文件:$latest_file" if [ "$file_crtime" -gt "$specified_time" ]; then echo "创建时间晚于指定时间:$SPECIFIED_DATE" else echo "创建时间早于或等于指定时间:$SPECIFIED_DATE" fi
保存为check_latest_file.sh,赋予执行权限后运行:
chmod +x check_latest_file.sh ./check_latest_file.sh
内容的提问来源于stack exchange,提问作者SirLouen
相关产品推荐
相关产品推荐

