2013-02-10 30 views
31

Tôi đang làm việc trên một tập lệnh bash nhỏ giống như dropbox, làm cách nào tôi có thể so sánh ngày của 2 tệp và thay thế (các) cũ bằng một tệp mới mà không sử dụng rSync . cách đơn giản để xử lý này? có thể SHA1 giúp tôi biết phiên bản mới hơn không?so sánh ngày của tệp bash

+0

Nó thực sự phụ thuộc vào ý bạn là "ngày của tệp". Có lẽ bạn đang đề cập đến 'mtime', nhưng tính đặc hiệu thì tốt. –

+0

@WilliamPursell, sửa đổi cuối cùng tôi có nghĩa là –

Trả lời

72

Bạn có thể so sánh lần sửa đổi tập tin với test, sử dụng -nt (mới hơn) và -ot (lớn hơn) khai thác:

if [ "$file1" -ot "$file2" ]; then 
    cp -f "$file2" "$file1" 
fi 
+5

đó là tuyệt vời :))) không bao giờ nghĩ rằng so sánh đơn giản có thể làm công việc kể từ khi tôi mới đến centOS :) cảm ơn u :) –

+0

-nt dường như có nghĩa là mới hơn hoặc cùng tuổi. –

+0

@JoeC Tôi đã kiểm tra và nếu cùng độ tuổi trở lại 1 (sau 'chạm -r ... ') –

2

thế nào về

stat file|awk -F': ' '/Modify: /{print $2}' 
+0

Điều này đã giúp tôi hiểu những gì tôi đã cố gắng hoàn thành. Bây giờ, làm thế nào để so sánh những lần đó? Tôi đang sử dụng các câu trả lời được tìm thấy ở đây: http://stackoverflow.com/questions/8116503/how-to-compare-two-datetime-strings-and-return-difference-in-hours-bash-shell Hoàn hảo! – harperville

2

Hoặc thậm chí ngắn hơn và đẹp hơn, nhìn tại man stat:

stat -c %y file 
4

Đây là giải pháp POSIX:

find -name file2 -newer file1