2026-05-29 23:13:06
命令行格式化时间主要通过date命令实现,结合awk、sed等文本处理工具可处理非标准时间戳。核心技巧包括掌握date的格式化代码、使用-d选项解析自定义时间,并通过变量和命令替换实现自动化处理。
1. 使用date命令格式化当前时间date命令的+选项允许自定义输出格式,常用格式化代码如下:
示例:输出当前时间为年-月-日 时:分:秒格式
date +%Y-%m-%d %H:%M:%S若时间戳为非标准格式(如20240308_143022.log),需先提取日期和时间部分,再通过date -d转换格式。
步骤1:提取日期和时间部分使用awk按分隔符(如_)拆分字符串:
date_part=$(awk -F_ '{print $1}' <<< "20240308_143022.log") # 提取"20240308"time_part=$(awk -F_ '{print $2}' | awk -F. '{print $1}' <<< "20240308_143022.log") # 提取"143022"将提取的日期和时间拼接为YYYYMMDDHHMMSS格式,再用date -d解析并输出标准格式:
formatted_time=$(date -d "${date_part}${time_part:0:2}:${time_part:2:2}:${time_part:4:2}" +%Y-%m-%d %H:%M:%S)简化版脚本(直接拼接并解析):
timestamp="20240308143022" # 假设已提取并拼接为连续字符串formatted_time=$(date -d "$(echo $timestamp | sed 's/(....)(..)(..)(..)(..)(..)/1-2-3 4:5:6/')" +%Y-%m-%d %H:%M:%S)若需批量重命名文件(如将20240308_143022.log改为2024-03-08_14-30-22.log),可结合for循环和参数扩展:
for file in *.log; do date_part=$(awk -F_ '{print $1}' <<< "$file") time_part=$(awk -F_ '{print $2}' | awk -F. '{print $1}' <<< "$file") formatted_date=$(date -d "${date_part:0:4}-${date_part:4:2}-${date_part:6:2}" +%Y-%m-%d) formatted_time=$(date -d "${date_part}${time_part}" +%H-%M-%S) mv "$file" "${formatted_date}_${formatted_time}.log"done通过灵活组合上述工具,可高效完成从简单当前时间格式化到复杂日志文件重命名的各类任务。建议从基础命令开始练习,逐步掌握管道、变量替换和文本处理技巧。