Làm thế nào để chỉ nhận các tệp được tạo sau một ngày với ls?


97

Với lslệnh, có thể chỉ hiển thị các tệp được tạo sau một ngày, giờ cụ thể ...?

Tôi đang hỏi nó bởi vì tôi có một thư mục với hàng ngàn tệp.

Tôi muốn thấy tất cả các tập tin đã được tạo ra từ ngày hôm qua.

Tôi sử dụng ls -ltrnhưng tôi phải chờ để xem tất cả các tệp ...

Có tương đương DIRECTORY/SINCE=datevới OpenVMS không?


1
lsliệt kê các tệp, nhưng nó không cung cấp nhiều để chọn các tệp cần liệt kê hoặc định dạng đầu ra. Sử dụng Globing (ký tự đại diện) hoặc findkhi bạn muốn chọn tệp theo tên hoặc siêu dữ liệu (ví dụ: ngày).
Gilles

3
Vậy làm thế nào để hẹn hò với ls đi? Hai bạn đã đánh nó đi?
Garrett Albright

3
Với zsh:ls -1 -- *(.m-1)
don_crissti

Câu trả lời:


123

Bạn có thể sử dụng findlệnh để tìm tất cả các tệp đã được sửa đổi sau một số ngày nhất định.

Ví dụ: để tìm tất cả các tệp trong thư mục hiện tại đã được sửa đổi từ hôm qua (24 giờ trước), hãy sử dụng:

find . -maxdepth 1 -mtime -1

Lưu ý rằng để tìm các tệp được sửa đổi trước 24 giờ trước, bạn phải sử dụng -mtime +1thay vì -mtime -1.


3
Điều tôi sẽ nói Không có lý do gì để giới hạn bản thân lsở đây, Luc.
Warren Young

14
Với GNU find, có những khả năng khác. -mmin 5liệt kê các tập tin được sửa đổi trong 5 phút cuối. -newermt "2011-02-27 13:42"liệt kê các tập tin được sửa đổi kể từ ngày được chỉ định. Bạn có thể sử dụng -exec ls --color -ld {} +thay vì -lsđể có được màn hình màu thông thường (nếu bạn thích đầu ra ls màu).
Gilles

3
Lưu ý dấu trừ:find . -mmin -5
user7543

và -maxdepth 1 có thể được tăng lên bất kỳ giá trị n nào để tìm kiếm các tệp theo cấp thư mục con
anshuman

3
Đối với tôi nó hoạt động như thế này: tìm. -type f -newermt '1/15/2012 18:09:00'
woohoo

15
find . -type f -newermt '1/30/2017 0:00:00'

Điều này sẽ tìm thấy tất cả các tập tin sửa đổi sau một ngày cụ thể.


1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"

5
Chào Trant! Mặc dù giải pháp của bạn là sáng tạo trong việc cố gắng tôn trọng yêu cầu của câu hỏi để sử dụng ls, phân tích đầu ra của ls hiếm khi an toàn (ví dụ: điều gì xảy ra với tên tệp bao gồm dòng mới ở đây?), Và chúng tôi muốn câu trả lời không chỉ là một lót, nhưng để giải thích làm thế nào họ làm việc chi tiết như có liên quan.
dhag

1
Các vấn đề: (1) Trên hệ thống của tôi, datenói Jun 03, nhưng lsnói Jun  3, vì vậy điều này không hoạt động. (2) Một tuần trước, ngày đó là ngày 27 tháng 5.  ls -l | grep "May 27"sẽ tìm thấy các tệp được sửa đổi vào ngày hôm đó, nhưng cũng có các tệp được sửa đổi vào ngày 27 tháng 5 của bất kỳ năm nào khác - và các tệp có tên của ngày 27 tháng 5. (Và nếu bạn nghĩ rằng đó là một mối quan tâm hoàn toàn không có thật, nhìn lên “ngày 10 tháng 12” .) (3) Và, nếu bạn quản lý để có được dateđể nói Jun 2, grepping cho rằng sẽ tìm thấy Jun 20qua Jun 29, nhưng không phải Jun  2(với hai dấu cách). Tiết (Cont'd)
G-Man

1
(Tiếp theo), (4) OP đã sử dụng ls -ltrđể có được các tệp được sửa đổi gần đây nhất ở cuối danh sách. Nếu bạn đang chuẩn bị cho một ngày, thì không cần phải làm điều đó (ngoại trừ để nhận các tệp ngày 27 tháng 5 năm 2015 ở cuối danh sách, sau các tệp ngày 27 tháng 5 năm 2014, ngày 27 tháng 5 năm 2013, v.v.). (5) Trong awk, print $2, $3tương đương với print $2" "$3, và dễ đọc hơn nhiều - đặc biệt là khi có ba cấp độ trích dẫn khác.
G-Man

ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo

0

Hy vọng điều này hoạt động:

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $9}'

Đây:

$6 indicates position of month
$7 indicates day of the month

Lệnh trên này in tất cả các tên tệp được tạo vào hoặc sau ngày 1 tháng 5 đến ngày 31 tháng 5

Nếu bạn muốn in ngày cũng trên bảng điều khiển, hãy thử điều này

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

Nếu bạn muốn chỉ định đường dẫn của thư mục, bạn có thể thử nó

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

Vì nhiều lý do, không nên phân tích lsđầu ra. Và không phải ai cũng nói được tiếng Anh :-)
Luc M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.