tcsh & stat:比较文件在脚本中的修改时间

tcsh & stat: comparing files' modification times in script

我写了一个 tcsh 脚本[警告,我是 tcsh 的新手!] 检查输入文件的扩展名,如果它有读取权限,并从它的 .tex 输入文件输出一个 pdf 版本。

如果生成的 pdf 文件的修改时间比输入文件的修改时间更新 。[=12=,我的下一步是让程序 退出]

我看到我可以求助于 stat 并想到将 stat 的修改时间存储到变量中。

# is the name of the .tex file, like sample.tex
set mtime_pdf = `echo stat -c %Y :t:r.pdf` 
set mtime_tex = `echo stat -C %Y `

现在我该如何比较它们? 我希望能够做类似的事情(这更像伪代码)

if ( $mtime_pdf < $mtime_tex ) then
      echo "too new!"
      exit 2

想法?谢谢!

你没说 stat -c %Y 指向 Linux。 stat 的问题是它的参数不是很便携。一种更便携的文件比较方法是使用 find.

您的 set 命令应该去掉 echo

总而言之,这是一个演示这两种方法的示例:

#!/usr/bin/tcsh

if ( $#argv < 2 ) then
    echo "Usage: [=10=] <file> <file>"
    exit 2
endif

set t1=`stat -c '%Y' `
set t2=`stat -c '%Y' `
echo " is $t1 seconds old"
echo " is $t2 seconds old"

if ( $t1 < $t2 ) then
    echo " is older as "
else
    echo " is newer or the same age as "
endif

if { find  -newer  } then
    echo " was modified after or at the same time as "
else
    echo " was modified before as "
endif

if { find  -cnewer  } then
    echo " was created after or at the same time as "
else
    echo " was created before "
endif

我会简单地使用 tcsh 的文件查询操作符,例如:

if ( ( -M file1 ) >= ( -M file2 ) ) then
    echo 'file 1 newer'
else
    echo 'file 2 newer'
endif

似乎比使用 stat 更简单。

此致