如何从指定文件中筛选出早于当前日期30天的文件夹列表?
提取早于当前日期30天的文件夹路径
针对你的需求,这里提供两种高效的Bash解决方案,无需复杂的sort/awk组合:
方法一:字符串直接对比(推荐,更高效)
由于文件中日期是YYYY-MM-DD格式,这种格式的字符串字典序和实际日期顺序完全一致,因此可以直接计算出30天前的日期字符串,再用awk做字符串比较:
# 计算30天前的日期(格式同文件中的日期) THRESHOLD_DATE=$(date -d "-30 days" +%Y-%m-%d) # 遍历文件,输出日期早于阈值的文件夹路径 awk -v threshold="$THRESHOLD_DATE" '$1 < threshold {print $2}' /tmp/file
方法二:时间戳对比(兼容更多日期格式)
如果后续日期格式可能变化,或者需要更精准的时间对比,可以将日期转换为Unix时间戳(从1970年到该日期的秒数),再做数值比较:
# 计算30天前的时间戳 THRESHOLD=$(date -d "-30 days" +%s) # 逐行处理文件,转换日期为时间戳后对比,输出符合条件的路径 awk -v threshold="$THRESHOLD" '{ cmd = "date -d \"" $1 "\" +%s" cmd | getline timestamp close(cmd) if (timestamp < threshold) print $2 }' /tmp/file
验证说明
以当前日期为2023-10-20为例,30天前的日期是2023-09-20,运行上述命令后,文件中所有日期为2023-09-14、2023-09-18、2023-09-19的文件夹路径都会被输出,符合需求。
内容的提问来源于stack exchange,提问作者King David
相关产品推荐
相关产品推荐

