2011-01-23 22 views
21

Tôi biết rõ việc có thể thực hiện find myfile.txt -mtime +5 để kiểm tra xem tệp của tôi có lớn hơn 5 ngày hay không. Tuy nhiên tôi muốn lấy mtime trong ngày của myfile.txt và lưu nó vào một biến để sử dụng thêm. Tôi sẽ làm như thế nào?bash - Nhận mtime của tập tin cụ thể?

Trả lời

43

stat có thể cung cấp cho bạn những thông tin:

filemtime=`stat -c %Y myfile.txt` 

%Y mang đến cho bạn sự biến đổi cuối cùng là "giây kể từ khi The Epoch", nhưng có rất nhiều lựa chọn khác; more info. Vì vậy, nếu tệp đã được sửa đổi vào ngày 2011-01-22 lúc 15:30 GMT, thì ở trên sẽ trả về một số trong khu vực của 1295710237.

Chỉnh sửa: Ah, bạn muốn thời gian sau khi nó được sửa đổi . Điều đó sẽ phức tạp hơn, ít nhất là vì "ngày" không phải là khoảng thời gian cố định (một số "ngày" chỉ có 23 giờ, số khác 25   — nhờ thời gian tiết kiệm ánh sáng ban ngày).

Các ngây thơ phiên bản có thể trông như thế này:

filemtime=`stat -c %Y $1` 
currtime=`date +%s` 
diff=$(((currtime - filemtime)/86400)) 
echo $diff 

... nhưng một lần nữa, đó là giả định một ngày luôn có chiều dài chính xác 86.400 giây.

Tìm hiểu thêm về số học trong bash here.

+0

Điều đó thật ngọt ngào, thật không may tôi đã làm một kẻ ngốc của bản thân mình và quên rằng tôi cần tuổi mtime trong ngày. Điều đó có thể không? – Industrial

+0

@Industrial: Một khi bạn có giá trị, bạn có thể làm toán trên đó. Tôi không làm theo những gì bạn có nghĩa là bởi "... tuổi mtime trong ngày." (Ngày kể từ khi nào? Bạn có nghĩa là, bao nhiêu ngày trước nó đã được sửa đổi?) –

+0

Bỏ lỡ phần về ngày, bỏ phiếu +1 – Anders

2

Tôi là câu trả lời này?

A=$(stat -c "%y" myfile.txt) 

nhìn vào stat giúp đỡ

stat --help 
Usage: stat [OPTION]... FILE... 
Display file or file system status. 
[...] 
-c --format=FORMAT use the specified FORMAT instead of the default; 
         output a newline after each use of FORMAT 
[...] 
The valid format sequences for files 
[...] 
    %y Time of last modification, human-readable 
    %Y Time of last modification, seconds since Epoch 
[...] 
3
AGE=$(perl -e 'print -M $ARGV[0]' $file) 

sẽ đặt $ TUỔI đến tuổi $ tập tin trong ngày, như điều hành -M Perl xử lý các stat cuộc gọi và chuyển đổi sang ngày đối với bạn .

Giá trị trả lại là giá trị dấu phẩy động (ví dụ: 6.62849537 ngày). Thêm một int đến sự biểu hiện nếu bạn cần phải có một kết quả số nguyên

AGE=$(perl -e 'print int -M $ARGV[0]' $file) 

Ruby và Python cũng có của họ một lớp lót để stat một tập tin và trở lại một số dữ liệu, nhưng tôi tin rằng Perl có cách ngắn gọn nhất.

+0

Đây là câu trả lời hay hơn so với chấp nhận! – Anne

Các vấn đề liên quan