Windows命令行中如何为AWS CLI输出添加时间戳?
为AWS CLI同步输出添加时间戳的解决方案
问题原因
你遇到的awk语法错误,是因为Windows命令提示符(CMD)对引号的解析规则和类Unix环境不同:CMD不把单引号'当作字符串边界,会直接传递给awk,导致strftime的格式字符串被空格截断,awk无法识别完整参数,从而抛出语法错误。
修正原awk命令(CMD环境)
在CMD中,需要用双引号包裹awk脚本,同时对脚本内部的双引号和$符号进行转义:
aws s3 --output text sync localPath s3://bucketName --endpoint-url https://s3-vpcurl.com | awk "{ print strftime(\"[%Y-%m-%d %H:%M:%S]\"), \$0 }" >> C:\syncFromS3\NASToS3-Log.txt
- 用
\"转义脚本内部的双引号,确保strftime的格式字符串被正确识别 - 用
\$0转义$0,避免CMD将其解析为环境变量
更适合Windows的替代方法(PowerShell)
PowerShell对管道和字符串处理更友好,无需依赖awk,直接用内置命令实现:
aws s3 --output text sync localPath s3://bucketName --endpoint-url https://s3-vpcurl.com | ForEach-Object { "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] $_" } | Out-File -FilePath C:\syncFromS3\NASToS3-Log.txt -Append
Get-Date -Format 'yyyy-MM-dd HH:mm:ss'生成指定格式的时间戳ForEach-Object遍历每一行输出,拼接时间戳和原始内容Out-File -Append实现日志追加写入
类Unix环境替代方案(Git Bash/WSL)
如果你使用Git Bash或Windows Subsystem for Linux(WSL),可以直接调整路径后使用接近原命令的写法:
aws s3 --output text sync localPath s3://bucketName --endpoint-url https://s3-vpcurl.com | awk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }' >> /mnt/c/syncFromS3/NASToS3-Log.txt
- 将Windows路径
C:\syncFromS3转换为WSL格式/mnt/c/syncFromS3
内容的提问来源于stack exchange,提问作者Nitesh Singh
相关产品推荐
相关产品推荐

