我有两个在不同时间创建的文件。
在我的 shell 脚本程序中,我想用之前创建的文件的日期初始化一个变量。
例如。如果 file1 是在 4 月 22 日创建的,而 file2 是在 4 月 19 日创建的。我的变量应该初始化为 4 月 19 日。
如何在 bash shell 中执行此操作?
我有两个在不同时间创建的文件。
在我的 shell 脚本程序中,我想用之前创建的文件的日期初始化一个变量。
例如。如果 file1 是在 4 月 22 日创建的,而 file2 是在 4 月 19 日创建的。我的变量应该初始化为 4 月 19 日。
如何在 bash shell 中执行此操作?
假设存在 GNU stat
(GNU coreutils 的一部分):
if [[ $(stat -c%W <file1>) -lt $(stat -c%W <file2>) ]]
then
EARLIER="$(stat -c%w <file1>)"
else
EARLIER="$(stat -c%w <file1>)"
fi
请注意%W
(整数)与%w
(人类可读)的情况很重要。
%W
/%w
是出生时间,因为您要求“创建时间”。通常%Y
/ %y
(最后修改)或%Z
/ %z
(最后更改)更有意义。
如果您的日期需要不同的格式,您可以将stat
输出提供给date
,例如:
date -d "$(stat -c%w <earlier_file>)" +"%Y-%m-%d")
PS:当您涉及时间戳时,请考虑RFC 3339的格式,即 YYYY-MM-DD HH:MM:DD-TZ,它是明确的、可移植的和可排序的。
/bin/date
可以转换为 timestamps,使用%s
格式,之后日期比较是一个直接的数字比较,所以解决你的问题,模语法错误,是:
DATE1=`date -j '22 April' +"%d %B"`
DATE2=`date -j '19 April' +"%d %B"`
if [[ $DATE2 < $DATE1 ]]; then
export VAR=`date -j $DATE1 +"%s"`
else
export VAR=`date -j $DATE2 +"%s"`
fi