17

Как сравнить временную метку двух файлов?

Я пробовал это, но это не работает:

file1time=`stat -c %Y fil1.txt`
file2time=`stat -c %Y file2.txt`
if[$file1time -gt $file2time];
then
 doSomething
fi

Я напечатал обе временные метки, по порядку, и это дает мне

1273143480
1254144394
./script.sh: line 13: [1273143480: command not found

Так что в принципе, если сравнение не работает, я думаю. Или, если есть какой-то другой способ, кроме того, что я делаю, пожалуйста, дайте мне знать. Что я должен изменить?

4 ответа4

26

Операторы для сравнения меток времени:

[ $file1 -nt $file2 ]
[ $file1 -ot $file2 ]

Мнемоника проста: «новее, чем» и «старше, чем».

5

Это из-за некоторых пропущенных мест. [ это команда, поэтому вокруг нее должны быть пробелы, а ] - это специальный параметр, сообщающий ей, где заканчивается ее строка команды. Итак, ваша тестовая строка должна выглядеть так:

if [ $file1time -gt $file2time ];
1

if не волшебство Он пытается выполнить переданную ему команду и проверяет, имеет ли он нулевой статус выхода. Он также плохо обрабатывает несуществующие аргументы, поэтому вы должны заключать в кавычки переменные, используемые в нем.

if [ "$file1time" -gt "$file2time" ]
0
if ( [ $file1time -gt $file2time ] );
then
 doSomething
fi                                                                    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .