Bash dosya zaman damgalarını nasıl karşılaştırırım?


17

İki dosyanın zaman damgasını nasıl karşılaştırabilirim?

Bunu denedim ama işe yaramıyor:

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

Her iki zaman damgasını da sırayla yazdırdım ve bana

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

Yani temelde eğer karşılaştırma çalışmıyor sanırım. Ya da yaptığımdan başka güzel bir yol varsa, lütfen bana bildirin. Neyi değiştirmek zorundayım?


1
Kodunuzun köşeli parantezlerin etrafında boşluklara ihtiyacı var.
Jonathan Leffler

Test mekanizması, zaman damgalarını karşılaştırmak için yerleşik mekanizmaya kıyasla çok karmaşıktır.
Jonathan Leffler

Yanıtlar:


26

Zaman damgalarını karşılaştırmak için operatörler:

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

Anımsatıcı kolaydır: 'daha yeni' ve 'daha büyük'.


5

Bunun nedeni bazı eksik boşluklar. [bir komuttur, bu yüzden onun çevresinde boşluklar olmalıdır ]ve comand satırının nerede biteceğini söylemek için özel bir parametredir. Bu nedenle, test hattınız şöyle görünmelidir:

if [ $file1time -gt $file2time ];

3
[bir test komutudur - kılavuz bashsayfasının "Koşullu İfadeler" bölümüne bakın. Ayrıca bağımsız bir yürütülebilir dosya var /usr/bin/testve /usr/bin/[ancak bash kullanıyorsanız ve tam yolu kullanmıyorsanız, kabuk yerleşimini kullanıyorsunuz.
Doug Harris

@Doug Harris +1, konuyla ilgili daha eksiksiz açıklama için.
goedson

1

ifsihir değil. Kendisine iletilen komutu çalıştırmayı dener ve sıfır çıkış durumuna sahip olup olmadığını denetler. Ayrıca, var olmayan argümanları da iyi işlemez, bu yüzden içinde kullanılan değişkenleri alıntılamanız gerekir.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.