求AWK命令:打印指定目录下至少1小时前修改的file开头文件名
用AWK实现指定文件的修改时间过滤需求
要实现类似find /tmp/test/ -mmin +60且筛选file开头文件的功能,AWK本身无法直接读取文件系统属性,需要结合外部命令获取文件的修改时间信息,再用AWK做过滤判断。以下是可行的命令(支持文件名含空格的场景):
current_time=$(date +%s) stat -c "%Y|%n" /tmp/test/file* | awk -F'|' -v now="$current_time" '$1 <= now - 3600 {print $2}'
各部分作用:
current_time=$(date +%s):获取当前时间的Unix时间戳(从1970年1月1日至今的总秒数)stat -c "%Y|%n" /tmp/test/file*:针对/tmp/test/下所有以file开头的文件,输出格式为「修改时间戳|完整文件名」的内容,%Y对应文件修改时间的Unix时间戳,%n对应完整文件名awk -F'|' -v now="$current_time" '$1 <= now - 3600 {print $2}':用-F'|'指定分隔符为竖线,将当前时间戳通过-v参数传入AWK作为变量now;判断文件修改时间戳是否早于当前时间减去3600秒(即1小时前),满足条件则打印对应的完整文件名
如果你的系统中stat命令不支持%Y参数(比如部分BSD系统),可以改用ls命令结合AWK处理:
current_time=$(date +%s) ls -lT /tmp/test/file* | awk -v now="$current_time" '$7 <= now - 3600 {print $9}'
注:ls -lT会输出Unix时间戳格式的修改时间,不同系统的ls列数可能有差异,需要根据实际输出调整$7(时间戳列)和$9(文件名列)的位置。
内容的提问来源于stack exchange,提问作者user1402648
相关产品推荐
相关产品推荐

