我有一个脚本返回一个文件列表,其中包含每个文件的完整路径。对于例如 - root/folder/file@1610565763436
。因此,输出看起来像
/root/folder/file@1610565763436
/root/folder/file@1610568241000
/root/folder/file@1610597041000
/root/folder/file@1610625841000
/root/folder/file@1610654641000
/root/folder/file@1610683441000
/root/folder/file@1610712242000
/root/folder/file@1610741041000
/root/folder/file@1610769841000
/root/folder/file@1610798641000
/root/folder/file@1610827441000
/root/folder/file@1610856241000
/root/folder/file@1610885041000
/root/folder/file@1610913841000
我想格式化输出,以便仅将人类可读的时间戳作为输出。我尝试执行 acut -d "@" -f 2
来获取时间戳,但将其管道传输到 xargs 并运行日期命令对我来说不起作用。 IE /bin/bash scriptToGetFiles | cut -d "@" -f 2 | xargs date -d {}
。
FWIW,运行上述命令会xargs -t
返回错误
date -d @ 1610565763436 1610568241000 1610597041000 1610625841000 1610654641000 1610683441000 1610712242000 1610741041000 1610769841000 1610798641000
date: extra operand ‘1610568241000’
我将不胜感激任何建议或指示。
答案1
使用 GNU 日期:
$ echo /root/folder/file@1610565763436 | cut -d@ -f2 | xargs -I '{}' echo {} / 1000 | bc | xargs -I '{}' date --date=@{}
Wed Jan 13 20:22:43 CET 2021
在 FreeBSD 上:
$ echo /root/folder/file@1610565763436 | cut -d@ -f2 | xargs -I '{}' echo {} / 1000 | bc | xargs date -r
Wed Jan 13 20:22:43 CET 2021
答案2
使用普通的 bash,printf
可以格式化 Epoch 时间:
processThatOutputsStuff | while IFS=@ read -r path date; do
printf '%(%c)T\n' "${date%???}"
done
${date%???}
是一个参数扩展从变量值中删除最后 3 个字符。
如果您想要不同的日期时间格式,请替换%c
.