2012-03-16 18 views
6

Tôi đang cố gắng đếm số lượng tệp PDF đã được tạo vào tháng trước. Tôi đang sử dụng lệnh sau nhưng nó trở 0nhận được số lượng tệp được sửa đổi trong tháng trước

find . -name '*.pdf' -mtime +46 ! -mtime +30 | wc -l 

tôi trong thư mục chính xác và nó có vẻ như logic là đúng ... bất kỳ ý tưởng về lý do tại sao điều này là không làm việc? Có cách nào dễ hơn không, nói rằng để vượt qua tháng cụ thể mà tôi đang tìm kiếm thay vì cố tính toán những ngày như thế này?

Trả lời

21

Bạn đang tìm kiếm tất cả pdf file:

  • 46 days ago
  • không 30 days ago

    x>46 && x<=30 --> false 
    

Nó sẽ trả về kết quả sản phẩm nào.


Numeric arguments can be specified as 
    +n  for greater than n, 
    -n  for less than n, 
    n  for exactly n. 

Nếu bạn muốn tìm tất cả pdf file (30<x<46):

$ find . -name '*.pdf' -mtime +30 -mtime -46 
+0

[Có 3 loại "dấu thời gian"] (https://unix.stackexchange.com/a/2465/209677): thời gian truy cập ('atime'), thay đổi thời gian (' ctime') và sửa đổi thời gian ('mtime'). Tại sao bạn sử dụng 'mtime' thay vì' ctime'? –

6

Bạn dường như tìm kiếm các file đó lớn tuổi hơn 46 ngày nhưng không cũ (tức là trẻ hơn) so với 30 ngày.

Điều này thì sao?

find . -name '*.pdf' -mtime -46 -mtime +30 
8

Nếu bạn đang sử dụng GNU find bạn có thể chỉ rõ ngày tháng tuyệt đối như thế này:

find . -name '*.pdf' -newermt 2012-01-31 ! -newermt 2012-02-29 | wc -l 

Tùy chọn -newermt sẽ tìm các file đã được sửa đổi gần đây hơn một thời gian tuyệt đối.

Nếu bạn không sử dụng GNU, bạn có thể sử dụng touch để tạo ra hai tập tin với timestamps thích hợp và tìm các file PDF của bạn như thế này:

touch -t 201201312359 oldest # 11:59 PM 1/31/2012 
touch -t 201203010000 newest # midnight 3/1/2012 
find . -name '*.pdf' -newer oldest ! -newer newest | wc -l 

Xem GNU documentation để biết chi tiết.

+0

Cảm ơn lời khuyên! Điều này làm việc với 4.3.3+ (ngày 24 tháng 1 năm 2009), vì vậy không có sẵn trên các hệ thống cũ hơn (chẳng hạn như RHEL 5). – Nickolay

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