Câu trả lời:
Tôi thích sử dụng tmpwatch
cho những thứ này, đây là lần cuối cùng tập tin được sửa đổi. Nó đơn giản và hoạt động tốt trong nhiều trường hợp:
tmpwatch -m 720 /path/to/cache
Đối với Ubuntu, hãy kiểm tra tmpreaper
thay thế.
Nếu bạn muốn kiểm tra lần cuối cùng tệp được truy cập hơn bạn sử dụng như sau:
tmpwatch -a 720 /path/to/cache
Bạn không thể sử dụng tmpwatch -a trên các hệ thống tệp được gắn với noatime. bạn vẫn có thể sử dụng -m
Ubuntu 10.04.2 LTS
và lệnh đó không tồn tại ..
tmpreaper
thay thế.
Hãy thử chạy ở trên với tốt đẹp:
nice -n 39 find cache* -mtime +30 -exec rm -f {} ';'
Theo cách đó, tải trọng lớn sẽ chỉ xuất hiện nếu không có gì khác cần chạy, nếu không các quy trình khác sẽ được ưu tiên (nếu độ đẹp của chúng thấp hơn 19 tức là tối đa).
Lưu ý rằng đối số cho tùy chọn -n được thêm vào độ đẹp mặc định thay đổi trong khoảng từ -20 đến 19. Tôi đã sử dụng 39 để nó sẽ rất đẹp bất kể tính độc đáo ban đầu là gì.
Theo nhận xét của chiborg, tải là do bắt đầu rm cho mỗi tệp được tìm thấy. Tôi nhận thấy câu trả lời tmpwatch
được đề xuất thay thế, mà tôi chắc chắn hoạt động tốt. Tuy nhiên, nó không cần thiết.
Find có thể chạy lệnh được đưa ra để thực thi một lần, nếu bạn bảo nó tích lũy các tệp tìm thấy vào một danh sách các đối số như vậy:
find /path -name "*.moo" -exec rm {} \+
Điều này đôi khi có thể không hoạt động vì danh sách đối số có thể phát triển lớn hơn (tính bằng byte) so với mức tối đa được cho phép bởi trình bao (getconf ARG_MAX). Điều này có thể được giải quyết bằng xargs với tùy chọn -L.
xem xét ví dụ này:
$ echo 0 > /tmp/it;
$ for i in {0..15000};do echo $i;done |\
xargs --no-run-if-empty -L 5000 ./tmp/xr.sh
Iteration=0; running with 5000 arguments
Iteration=1; running with 5000 arguments
Iteration=2; running with 5000 arguments
Iteration=3; running with 1 arguments
$ cat tmp/xr.sh
#!/bin/sh
IT=`cat /tmp/it`
echo Iteration=$IT\; running with $# arguments
let IT=IT+1
echo $IT > /tmp/it
Vì vậy, không cần cài đặt thêm phần mềm, tất cả những gì bạn cần là trong gnu-findutils:
find /path -mtime +30 -print0 | xargs -0 -L 5000 rm
\+
; đồng bằng +
là đủ tốt. (2) Điều này sẽ không thành công vì danh sách đối số có thể tăng lớn. find … -exec … {} +
sẽ làm điều tương tự xargs
sẽ làm; nó sẽ chạy lệnh nhiều lần như nó cần. Ví dụ (như trong ví dụ của bạn), nếu bạn có từ 15001 đến 20000 tệp, find
sẽ chạy -exec
chương trình 'd ( rm
) bốn lần.
cache*
mở rộng ra nhiều tệp, bạn có thể muốn thử một cái gì đó nhưfind . -name 'cache*' -mtime +30 -exec rm {} \;
thay thế.