我写了一个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
思考?谢谢!
答案 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