比较shell中两个文件的日期

时间:2013-04-24 06:28:14

标签: shell

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

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

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

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

2 个答案:

答案 0 :(得分: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,非 - 轻松,便携,可排序。

答案 1 :(得分:-1)

/bin/dateconvert to 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