Jak porównać znacznik czasu dwóch plików?
Próbowałem tego, ale to nie działa:
file1time=`stat -c %Y fil1.txt`
file2time=`stat -c %Y file2.txt`
if[$file1time -gt $file2time];
then
doSomething
fi
Wydrukowałem oba znaczniki czasu, w kolejności i daje mi to
1273143480
1254144394
./script.sh: line 13: [1273143480: command not found
Zasadniczo, jeśli porównanie nie działa, tak myślę. Lub jeśli istnieje inny przyjemny sposób niż to, co robię, daj mi znać. Co muszę zmienić?
linux
bash
comparison
timestamp
newcoderintown
źródło
źródło
Odpowiedzi:
Operatory do porównywania znaczników czasu to:
Mnemonik jest łatwy: „nowszy niż” i „starszy niż”.
źródło
Wynika to z niektórych brakujących spacji.
[
jest poleceniem, więc musi mieć wokół siebie spacje, a]
jest specjalnym parametrem, który informuje, gdzie kończy się jego linia poleceń . Twoja linia testowa powinna więc wyglądać następująco:źródło
[
jest poleceniem testowym - patrz sekcja „WYRAŻENIA WARUNKOWE” nabash
stronie man. Istnieje również samodzielny plik wykonywalny/usr/bin/test
i/usr/bin/[
, ale jeśli używasz bash i nie używasz pełnej ścieżki, to używasz wbudowanej powłoki.if
to nie magia. Próbuje uruchomić przekazane mu polecenie i sprawdza, czy ma zerowy status wyjścia. Nie radzi sobie również dobrze z nieistniejącymi argumentami, dlatego powinieneś zacytować używane w nim zmienne.źródło
źródło