2008-10-30 27 views
144

Tôi đang viết tập lệnh bash cần xóa các tệp cũ.Cách xóa tệp cũ hơn X giờ

Nó hiện triển khai sử dụng:

find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete 

này sẽ xóa các tập tin lớn hơn 1 ngày.

Tuy nhiên, điều gì sẽ xảy ra nếu tôi cần độ phân giải tốt hơn trong 1 ngày, chẳng hạn như 6 giờ? Có một cách sạch đẹp để làm điều đó, như có sử dụng tìm và -mtime?

Trả lời

222

Có phải find của bạn có tùy chọn -mmin không? Điều đó có thể cho phép bạn kiểm tra số phút kể từ khi sửa đổi lần cuối:

find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete 

Hoặc có thể xem xét sử dụng tmpwatch để thực hiện công việc tương tự. phjr cũng đề nghị tmpreaper trong phần bình luận.

+5

Cảm ơn bạn đã trả lời tất cả mọi người, -mmin chính xác là những gì tôi cần :) bằng cách nào đó tôi đã bỏ lỡ nó trong trang hướng dẫn. –

+2

Tôi không có -mmin: ( – xtofl

+1

tmpwatch là dành cho bạn sau đó! –

2

-mmin chỉ trong vài phút.

Hãy thử xem trang người đàn ông.

man find 

để biết thêm các loại.

7

Bạn có thể thực hiện thủ thuật này: tạo tệp 1 giờ trước và sử dụng đối số -newer file.

(Hoặc sử dụng touch -t để tạo tệp như vậy).

+2

Vâng, tôi đã tìm thấy mẹo này tôi n google, tuy nhiên-mmin là thanh lịch hơn nhiều. –

+1

không có khóa chuyển đổi (ít nhất là trong lệnh tìm của tôi), và đó là những gì cần thiết. -newer không giúp được gì. – iconoclast

+5

@ Boss: may mắn thay, có toán tử '!' ... – xtofl

1

Đối với SunOS 5,10

Example 6 Selecting a File Using 24-hour Mode 


The descriptions of -atime, -ctime, and -mtime use the ter- 
minology n ``24-hour periods''. For example, a file accessed 
at 23:59 is selected by: 


    example% find . -atime -1 -print 




at 00:01 the next day (less than 24 hours later, not more 
than one day ago). The midnight boundary between days has no 
effect on the 24-hour calculation. 
0

find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;

0

Đây là những gì người ta có thể làm cho đi trên con đường @iconoclast đã tự hỏi về trong comment của họ về câu trả lời khác.

sử dụng crontab cho người dùng hoặc một /etc/crontab để tạo ra tập tin /tmp/hour:

# m h dom mon dow user command 
0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1 

và sau đó sử dụng này để chạy lệnh của bạn:

find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \; 
+0

Không sao cả. @ericaya thực sự đã làm hầu hết nó, tôi chỉ chạm vào mọi thứ. –

+0

'*/1' cho giờ là dư thừa trong crontab của bạn. Nó giống như đặt * trong trường giờ. – colminator

+0

@columnator - bạn đã đúng, tôi đã sửa lại mục nhập của mình. – satyr0909

0

Nếu bạn không có "-mmin" trong cài đặt phiên bản "tìm", sau đó "-mtime -0.041667" được tải khá gần "trong giờ trước", vì vậy trong trường hợp của bạn, hãy sử dụng:

-mtime +(X * 0.041667) 

như vậy, nếu X có nghĩa là 6 giờ, sau đó:

find . -mtime +0.25 -ls 

công trình vì 24 giờ * 0,25 = 6 giờ

1

Đây là phương pháp mà làm việc cho tôi (và tôi không nhìn thấy nó đang được sử dụng ở trên)

$ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null 

xóa tất cả các tệp cũ hơn 59 phút trong khi vẫn giữ nguyên các thư mục.

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