tcsh & stat: сравнение времени модификации файлов в скрипте

Я написал tcsh-скрипт [внимание, я новичок в tcsh!], который проверяет расширение входного файла, если у него есть права на чтение, а также выводит pdf-версию из своего входного файла .tex.

Мой следующий шаг — заставить программу выйти, если время модификации сгенерированного 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

Мысли? Благодарю вас!


person user3295674    schedule 27.02.2015    source источник
comment
не используйте tcsh для сценариев...   -  person shx2    schedule 28.02.2015
comment
@shx2 О, я согласен! Но у меня не было выбора в этом проекте..   -  person user3295674    schedule 02.03.2015


Ответы (2)


Вы не сказали, но 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
person fork2execve    schedule 03.03.2015

Я бы просто использовал операторы запроса файлов tcsh, например:

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

Кажется проще, чем использовать stat.

С Уважением

person le.zap    schedule 04.09.2017