Vì vậy, đây là thỏa thuận. Giả sử tôi có một thư mục có tên là "web", vì vậy
$ ls -la
drwx------ 4 rimmer rimmer 4096 2010-11-18 06:02 web
NHƯNG trong thư mục này, web/php /
$ ls -la
-rw-r--r-- 1 rimmer rimmer 1957 2011-01-05 08:44 index.php
Điều đó có nghĩa là mặc dù nội dung của thư mục của tôi, /web/php/index.php đã được sửa đổi lần cuối vào 2011-01-05, nhưng chính thư mục/web/được báo cáo là lần sửa đổi cuối cùng vào 2010-11-18.
Những gì tôi cần làm là báo cáo ngày sửa đổi cuối cùng của thư mục/web/thư mục của tôi là ngày sửa đổi mới nhất của bất kỳ tệp/thư mục nào trong thư mục này, theo cách đệ quy.
Làm thế nào để tôi đi về làm điều này?
Cái gì đó như:
find /path/ -type f -exec stat \{} --printf="%y\n" \; |
sort -n -r |
head -n 1
Giải trình:
Nếu bạn có phiên bản find
(chẳng hạn như GNU find
) hỗ trợ -printf
thì không cần phải gọi stat
nhiều lần:
find /some/dir -printf "%T+\n" | sort -nr | head -n 1
hoặc là
find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1
Nếu bạn không cần đệ quy, mặc dù:
stat --printf="%y\n" *
Nếu tôi có thể, tôi sẽ bỏ phiếu cho câu trả lời của Paulo. Tôi đã thử nó và hiểu khái niệm. Tôi có thể xác nhận nó hoạt động. Lệnh find
có thể xuất nhiều tham số. Ví dụ: thêm phần sau vào --printf
mệnh đề:
%a for attributes in the octal format
%n for the file name including a complete path
Thí dụ:
find Desktop/ -exec stat \{} --printf="%y %n\n" \; | sort -n -r | head -1
2011-02-14 22:57:39.000000000 +0100 Desktop/new file
Hãy để tôi nêu câu hỏi này: Tác giả của câu hỏi này có muốn giải quyết vấn đề của mình bằng Bash hoặc PHP không? Điều đó nên được chỉ định.