Bagaimana cara membandingkan cap waktu file dalam bash?


16

Bagaimana cara membandingkan cap waktu dua file?

Saya mencoba ini tetapi tidak berhasil:

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

Saya mencetak kedua perangko waktu, agar dan memberi saya

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

Jadi pada dasarnya jika perbandingan tidak berhasil, saya kira. Atau jika ada cara lain selain dari apa yang saya lakukan, tolong beri tahu saya. Apa yang harus saya ubah?


1
Kode Anda membutuhkan ruang di sekitar tanda kurung.
Jonathan Leffler

Mekanisme pengujian sangat kompleks dibandingkan dengan mekanisme bawaan untuk membandingkan perangko waktu.
Jonathan Leffler

Jawaban:


26

Operator untuk membandingkan perangko waktu adalah:

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

Mnemonik itu mudah: 'lebih baru dari' dan 'lebih tua dari'.


5

Ini karena beberapa ruang yang hilang. [adalah perintah, jadi ia harus memiliki spasi di sekitarnya dan ]merupakan parameter khusus untuk menentukan di mana garis perintahnya berakhir. Jadi, garis tes Anda akan terlihat seperti:

if [ $file1time -gt $file2time ];

3
[adalah perintah uji - lihat bagian "EKSPRESI KONDISI" dari bashhalaman manual. Ada juga standalone yang dapat dieksekusi di /usr/bin/testdan /usr/bin/[, tetapi jika Anda menggunakan bash dan tidak menggunakan path lengkap, Anda menggunakan shell builtin.
Doug Harris

@Doug Harris +1 untuk penjelasan yang lebih lengkap tentang topik ini.
goedson

1

ifbukan sihir. Ia mencoba menjalankan perintah yang diteruskan ke sana, dan memeriksa apakah ia memiliki status keluar nol. Itu juga tidak menangani argumen yang tidak ada dengan baik, itulah sebabnya Anda harus mengutip variabel yang digunakan di dalamnya.

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.