2

我有两个在不同时间创建的文件。

在我的 shell 脚本程序中,我想用之前创建的文件的日期初始化一个变量。

例如。如果 file1 是在 4 月 22 日创建的,而 file2 是在 4 月 19 日创建的。我的变量应该初始化为 4 月 19 日。

如何在 bash shell 中执行此操作?

4

2 回答 2

1

假设存在 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,它是明确的、可移植的和可排序的。

于 2013-04-24T07:40:05.620 回答
-1

/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
于 2013-04-24T06:55:06.487 回答