Як порівняти часові позначки файлів у bash?


16

Як порівняти часову позначку двох файлів?

Я спробував це, але це не працює:

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

Отже, якщо порівняння не працює, я думаю. Або якщо є якийсь інший приємний спосіб, ніж те, що я роблю, будь ласка, дайте мені знати. Що я повинен змінити?


1
У вашому коді потрібні пробіли навколо квадратних дужок.
Джонатан Леффлер

Тестовий механізм дуже складний порівняно із вбудованим механізмом порівняння часових позначок.
Джонатан Леффлер

Відповіді:


26

Операторами для порівняння часових позначок є:

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

Мнемонічне легко: «новіший за» та «старший за».


5

Це через деякі пропуски. [це команда, тому у неї повинно бути пробіли, і ]це спеціальний параметр, щоб вказати, де закінчується його командна лінія. Отже, ваш тестовий рядок повинен виглядати так:

if [ $file1time -gt $file2time ];

3
[є тестовою командою - дивіться розділ "УМОВНІ ВПРОВАДЖЕННЯ" на bashголовній сторінці. Там також виконується в /usr/bin/testі /usr/bin/[, але якщо ви використовуєте Баш і не використовувати повний шлях, року u're з допомогою вбудованої команди оболонки.
Дуг Харріс

@Doug Harris +1 для більш повного пояснення теми.
goedson

1

ifне є магією. Він намагається запустити передану йому команду та перевіряє, чи має стан нульового виходу. Він також не справляється з неіснуючими аргументами, саме тому ви повинні цитувати змінні, які використовуються в ньому.

if [ "$file1time" -gt "$file2time" ]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.