2012-03-08 30 views
21

Tôi muốn xây dựng lệnh Linux để liệt kê tất cả tệp (có đường dẫn đầy đủ) trong thư mục cụ thể (và thư mục con) được sắp xếp theo thời gian truy cập.Liệt kê tất cả các tệp (có đường dẫn đầy đủ) trong thư mục (và thư mục con), theo thứ tự thời gian truy cập

ls có thể đặt hàng theo thời gian truy cập, nhưng không cung cấp đường dẫn đầy đủ. tìm thấy cho đường dẫn đầy đủ, nhưng điều khiển duy nhất bạn có trong thời gian truy cập là xác định một dải với -atime N (truy cập ít nhất 24 * N giờ trước), đó không phải là những gì tôi muốn.

Có cách nào để đặt hàng theo thời gian truy cập và nhận được đường dẫn đầy đủ cùng một lúc không? Tôi chỉ có thể viết một kịch bản, nhưng có vẻ như có một cách để làm điều này với các chương trình Linux chuẩn.

Trả lời

20
find . -type f -exec ls -l {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

này sẽ tìm thấy tất cả các file, và sắp xếp chúng theo ngày và sau đó thời gian. Sau đó bạn có thể sử dụng awk hoặc cut để trích xuất các ngày và các tập tin tên từ ls -l đầu ra

+0

Hoạt động khá tốt. Tôi lấy nó rằng điều này không bị giới hạn bởi getconf ARG_MAX? – Andrew

+0

Phải, nó không bị giới hạn bởi ARG_MAX vì nó không vượt qua nó như là đối số, nhưng thay vào đó đầu ra đường ống. Không có giới hạn cho bao nhiêu dữ liệu có thể được đường ống giữa các chương trình. – Alex

+0

Tuyệt vời! Cảm ơn, bạn đời! Rất tốt để biết về giới hạn đó vì thư mục của tôi có rất nhiều tệp trong đó. – Andrew

11

bạn có thể thử:

ls -l $(find /foo/bar -type f) 
  • bạn có thể thêm các tùy chọn khác (ví dụ -t để phân loại) để ls lệnh để đạt được mục tiêu của bạn.
  • bạn cũng có thể thêm các tiêu chí tìm kiếm của bạn để find cmd
+1

tôi chút thay đổi này và nhận được chính xác những gì tôi muốn với ls -ult $ (tìm MỤC -type f) | grep -o "[^] \ + $" Cảm ơn! – Andrew

+2

Hãy nhớ rằng để đầu ra của '$ (tìm DIRECTORY -type f)' được sử dụng làm đối số dòng lệnh cho 'ls -ult', bạn sẽ bị giới hạn ở các tệp' getconf ARG_MAX' – Alex

+0

Cảm ơn các đầu lên, Alex! – Andrew

3

find . -type f | xargs ls -ldt nên làm các trick miễn là có không phải là rất nhiều tập tin mà bạn nhấn lệnh như giới hạn đối số và đẻ trứng 2 trường hợp của ls.

1
find . -type f -exec ls -l --full-time {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

Câu trả lời của Alex không hoạt động đối với tôi vì tôi đã có tệp cũ hơn một năm và sắp xếp đã bị làm sai lệch. Ở trên cho biết thêm tham số --full-thời gian mà nuetralizes các giá trị ngày/thời gian và làm cho họ sắp xếp bất kể họ là bao nhiêu tuổi.

+0

'- thông số thời gian 'không tồn tại trên Mac OS X. @ Kent giải pháp hoạt động rất tốt. –

1
pwd | xargs -I % find % -type f 
Các vấn đề liên quan