Câu trả lời:
Chỉ dành cho thời gian sửa đổi
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
Bạn có thể sử dụng -cmin
để thay đổi hoặc -amin
cho thời gian truy cập. Như những người khác đã chỉ ra, tôi không nghĩ rằng bạn có thể theo dõi thời gian tạo.
find
trả về khác 0 khi không tìm thấy kết quả phù hợp nào.
text.txt
được cho là không phải là một thư mục.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
Tôi luôn thích sử dụng date -r /the/file +%s
để tìm tuổi của nó.
Bạn cũng có thể làm touch --date '2015-10-10 9:55' /tmp/file
để có được thời gian cực kỳ chi tiết vào một ngày / giờ tùy ý.
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s)))
[với giả định được tạo ra và không bao giờ sửa đổi, hoặc "độ tuổi liên quan đến mod"]
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ]
, nếu không bị phản đối , ít nhất là cũ và ít di động hơn và nên sử dụng $(( ))
thay thế; và backquotes mong manh hơn $( )
; và các dấu gạch ngang trong tên hàm có thể không hoàn toàn di động. Bản chất của nó là tốt, mặc dù!
Sử dụng stat
để tìm ra ngày sửa đổi cuối cùng của tệp, date
để tìm ra thời gian hiện tại và việc sử dụng cơ bản một cách tự do, người ta có thể thực hiện bài kiểm tra mà bạn muốn dựa trên thời gian sửa đổi cuối cùng của tệp 1 .
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
echo "$somefile is older then 2 hours"
fi
Mặc dù find
cách tiếp cận này ít đọc được mã hơn một chút , nhưng tôi nghĩ rằng đó là một cách tiếp cận tốt hơn sau đó chạy find
để xem tệp bạn đã "tìm thấy". Ngoài ra, thao tác ngày tháng rất thú vị ;-)
%Z
thay vì %Y
bên dưới để lấy "thời gian thay đổi" có thể là những gì bạn muốn.[Cập nhật]
Đối với người dùng mac, hãy sử dụng stat -f "%m" $somefile
thay vì cú pháp cụ thể của Linux ở trên
stat
không phải là bản dựng - rất tệ của tôi, tôi sẽ sửa.
Thời gian tạo không được lưu trữ.
Những gì được lưu trữ là ba dấu thời gian (nói chung, chúng có thể được tắt trên một số hệ thống tệp nhất định hoặc bằng các tùy chọn hệ thống tệp nhất định):
"Thay đổi" đối với tệp được tính là thay đổi quyền, đổi tên, v.v. Trong khi sửa đổi chỉ là nội dung.
Mặc dù về mặt kỹ thuật, ctime không phải là thời điểm tạo ra, nhưng nó khá thường xuyên.
Vì ctime nó không bị ảnh hưởng bởi những thay đổi đối với nội dung của tệp, nó thường chỉ được cập nhật khi tệp được tạo. Và vâng - tôi có thể nghe thấy tất cả các bạn hét lên - nó cũng được cập nhật nếu bạn thay đổi quyền truy cập hoặc quyền sở hữu ... nhưng nói chung đó là điều được thực hiện một lần, thường là cùng lúc bạn đặt tệp ở đó.
Cá nhân tôi luôn sử dụng mtime cho mọi thứ, và tôi tưởng tượng đó là những gì bạn muốn. Nhưng dù sao đi nữa ... đây là một bản tóm tắt "không hấp dẫn" của Guss, trong một chức năng dễ sử dụng.
#! / bin / bash function age () { tên tệp cục bộ = $ 1 local change = `stat -c% Y" $ filename "` cục bộ bây giờ = `ngày +% s` địa phương đã trôi qua let elapsed = now-change echo $ trôi qua } tệp = "/" echo Tuổi của $ file là $ (age "$ file") giây.
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime")
superuser.com/questions/427551/…
chmod
, được áp dụng trên tệp, sẽ vô hiệu hóa ý tưởng đó. Nhưng tôi có thể sống cùng bạn khi làm điều đó ;-)
+%s
hiệp hai
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); }
(Cảm ơn @Grizly đã chỉnh sửa!)
noatime
tùy chọn (điều này tốt cho hiệu suất, vì vậy bạn nên sử dụng nó). Vì vậy, chỉ cần sử dụng %X
thay vì %Y
.
Tìm một cái là tốt nhưng tôi nghĩ bạn có thể sử dụng cách khác, đặc biệt là nếu bạn cần bao nhiêu giây để tệp cũ
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
sử dụng ngày GNU
Xem xét kết quả của 'chỉ số' công cụ:
File: `infolog.txt'
Size: 694 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 11635578 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ fdr) Gid: ( 1000/ fdr)
Access: 2009-01-01 22:04:15.000000000 -0800
Modify: 2009-01-01 22:05:05.000000000 -0800
Change: 2009-01-01 22:05:05.000000000 -0800
Bạn có thể thấy ở đây ba ngày để Truy cập / sửa đổi / thay đổi. Không có ngày tạo. Bạn chỉ có thể thực sự chắc chắn khi nội dung tệp đã được sửa đổi (trường "sửa đổi") hoặc inode của nó đã thay đổi (trường "thay đổi").
Ví dụ về thời điểm cả hai trường được cập nhật:
"Sửa đổi" sẽ được cập nhật nếu ai đó nối thông tin bổ sung vào cuối tệp.
"Thay đổi" sẽ được cập nhật nếu ai đó thay đổi quyền qua chmod.