我想获取文件创建的日期,并在 bash 脚本中格式化该日期。首先我运行:
filedate=(ls -ltr |awk '{print $6,$7}' |tail -n 1 )
此命令仅将文件的日期保存为变量。接下来,我想运行 date 命令以我需要的方式格式化日期。问题是“date”命令要求日期用引号引起来。所以我运行:
formatedate=$(date -d \" $filedate \" +%Y%m%d )
这总是给我一个错误,通常会打印类似“日期:额外操作数‘4’”或“日期:额外操作数‘””
答案1
这么多问题……
date
不需要双引号。shell 需要它们。
formatedate=$(date -d "$filedate" +%Y%m%d)
但date -d
可能不明白什么$filedate
会扩展为。一般来说你LC_TIME=C ls …
首先需要。
但你不应该解析ls
在零位,至少不是没有--quoting-style=shell-always
(您的可能会或可能不会支持ls
)来获取文件名(而不是日期)。
这个答案提供了可靠的方法来识别当前工作目录中的最新文件(这似乎就是您要尝试做的)。获取文件名后,使用stat
获取所需的日期,最好是以纪元以来的秒数表示。然后使用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
不可移植。希望你能使用它们。