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

时间:2015-02-27 04:55:17

标签: comparison tcsh stat

我写了一个tcsh脚本[警告,我对tcsh来说相当新!],它检查输入文件的扩展名,如果它具有读取权限,并且还从其.tex输入文件输出pdf版本。

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

我看到我可以诉诸 stat ,并考虑将修改时间从stat存储到变量中。

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

现在我该怎么做比较呢? 我希望能够做类似之类的事情(这更像是伪代码)

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

思考?谢谢!

2 个答案:

答案 0 :(得分:1)

我只想使用tcsh的文件查询操作符,例如:

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

似乎比使用stat更简单。

此致

答案 1 :(得分:0)

你没有说,只有stat -c %Y指向Linux。 stat的问题是它的参数不是很容易携带。进行文件比较的一种更便携的方法是使用find

您的set命令应该丢失echo

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

#!/usr/bin/tcsh

if ( $#argv < 2 ) then
    echo "Usage: $0 <file> <file>"
    exit 2
endif

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

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

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

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