tra-loi-cau-hoi-phat-trien-web.com

trong thiết bị đầu cuối linux, làm cách nào để hiển thị ngày sửa đổi cuối cùng của thư mục, xem xét nội dung của nó?

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?

58
Richard Rodriguez

Cái gì đó như:

find /path/ -type f -exec stat \{} --printf="%y\n" \; | 
     sort -n -r | 
     head -n 1

Giải trình:

  • lệnh find sẽ in thời gian sửa đổi cho mọi tệp đệ quy bỏ qua các thư mục (theo nhận xét của IQAndreas bạn không thể dựa vào dấu thời gian của thư mục)
  • sắp xếp -n (số) -r (đảo ngược)
  • đầu -n 1: có được mục đầu tiên
50
Paulo Scardine

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" *
19
Dennis Williamson

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.

6
Martian