Bash 脚本中日期格式化问题

Bash 脚本中日期格式化问题

我想获取文件创建的日期,并在 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不可移植。希望你能使用它们。

相关内容