我想获取创建文件的日期并在 bash 脚本中格式化日期。首先我运行:
filedate=(ls -ltr |awk '{print $6,$7}' |tail -n 1 )
此命令仅将文件的日期保存为变量。接下来我想运行 date 命令以我需要的方式格式化日期。问题是“date”命令要求日期用引号引起来。所以我运行:
formatedate=$(date -d \" $filedate \" +%Y%m%d )
这总是给我一个错误,通常会打印类似“日期:额外操作数'4'”或“日期:额外操作数'”'”的内容
这么多问题……
date
不需要双引号。外壳需要它们。
formatedate=$(date -d "$filedate" +%Y%m%d)
但date -d
可能不明白$filedate
扩展到. 一般来说,你LC_TIME=C ls …
首先需要。
但是您不应该ls
在第零位解析,至少不是没有--quoting-style=shell-always
(您的 可能支持也可能不支持ls
)来获取文件名(不是日期)。
这个答案提供了可靠的方法来识别当前工作目录中的最新文件(这似乎是你想要做的)。获得文件名后,使用stat
来获得您需要的日期,最好是自 Epoch 以来的秒数。然后使用date -d
.
# in Bash, GNU ls required
eval "files=($(ls -t --quoting-style=shell-always))"
if ((${#files[@]} > 0)); then
filedate="$(stat -c %Y "${files[0]}")"
formatedate="$(date -d "@$filedate" +%Y%m%d)"
echo "$formatedate"
fi
注意ls --quoting-style=
不是便携的,stat
不是便携的,date -d
不是便携的。希望你可以使用它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句