Làm thế nào để so sánh dấu thời gian tập tin trong bash?


16

Làm cách nào để so sánh dấu thời gian của hai tệp?

Tôi đã thử điều này nhưng nó không hoạt động:

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

Tôi đã in cả tem thời gian, theo thứ tự và nó cho tôi

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

Vì vậy, về cơ bản nếu so sánh không hoạt động, tôi đoán. Hoặc nếu có bất kỳ cách tốt đẹp nào khác ngoài những gì tôi đang làm, xin vui lòng cho tôi biết. Tôi phải thay đổi cái gì?


1
Mã của bạn cần không gian xung quanh dấu ngoặc vuông.
Jonathan Leffler

Cơ chế thử nghiệm rất phức tạp so với cơ chế tích hợp để so sánh tem thời gian.
Jonathan Leffler

Câu trả lời:


26

Các toán tử để so sánh tem thời gian là:

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

Việc ghi nhớ rất dễ dàng: 'mới hơn' và 'cũ hơn'.


5

Điều này là do một số không gian bị thiếu. [là một lệnh, vì vậy nó phải có khoảng trắng xung quanh nó và ]là một tham số đặc biệt để cho nó biết nơi kết thúc dòng comand của nó. Vì vậy, dòng thử nghiệm của bạn sẽ giống như:

if [ $file1time -gt $file2time ];

3
[là một lệnh kiểm tra - xem phần "GIẢI THÍCH ĐIỀU KIỆN" của bashtrang man. Ngoài ra còn có một tệp thực thi độc lập trong /usr/bin/test/usr/bin/[, nhưng nếu bạn đang sử dụng bash và không sử dụng đường dẫn đầy đủ, bạn sẽ sử dụng shell dựng sẵn.
Doug Harris

@Doug Harris +1 để được giải thích đầy đủ hơn về chủ đề này.
goedson

1

ifkhông phải là phép thuật. Nó cố gắng chạy lệnh được truyền cho nó và kiểm tra xem nó có trạng thái thoát không. Nó cũng không xử lý tốt các đối số không tồn tại, đó là lý do tại sao bạn nên trích dẫn các biến đang được sử dụng trong đó.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.